スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド
複数回分のデータを設定した配列型の変数を指定することで,一つのSQL文で複数回分の行の削除ができます。
HiRDBクライアントとHiRDBサーバとの間の通信回数を削減できるため,HiRDBクライアントからHiRDBサーバにアクセスし,大量データを高速に削除する場合に有効です。
DELETE文で,FOR句に埋込み変数を指定し,かつ探索条件中に指定した埋込み変数と標識変数をすべて配列型の変数にしてください。一括して削除する回数は,FOR句に指定した埋込み変数で制御します。
次に示す手順で実行してください。
動的に実行する場合の注意事項を次に示します。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXCOLUMN 80
#define INFILE "inputf1"
void abnormalend();
FILE *input ;
main() {
char indata[MAXCOLUMN];
char in_scode[5];
int i;
EXEC SQL BEGIN DECLARE SECTION;
short xdelete_num;
/* 配列型の埋込み変数の宣言 */
char xscode[50][5]; /* SCODE(CHAR(4)型の列) への探索条件用 */
EXEC SQL END DECLARE SECTION;
-------(HiRDBへのCONNECT処理(省略))-------
input = fopen(INFILE, "r");
if (input == NULL) {
fprintf(stderr, "can't open %s.", INFILE);
goto FIN;
}
EXEC SQL WHENEVER SQLERROR PERFORM abnormalend;
/* 一括削除回数設定 (最大50回に設定) */
xdelete_num=50;
while (!feof(input)) {
/* 配列変数に50回分(ファイルの終わりに到達した場合はその行まで) */
/* の探索条件データを設定する */
for ( i = 0; i < 50; i++) {
/* ファイルからデータを読み込む */
fgets(indata, MAXCOLUMN, input);
if (feof(input)){
/* ファイルの終わりに到達したら,ここまでの配列要素数を */
/* 一括削除回数に設定してfor文を抜ける */
xdelete_num= i;
break;
}
sscanf(indata, "%4s", in_scode);
/* 配列変数の要素に探索条件データを設定 */
strncpy(xscode[i], in_scode, 5);
}
/* DELETE実行 */
EXEC SQL FOR :xdelete_num
DELETE FROM ZAIKO WHERE SCODE = :xscode ;
}
EXEC SQL COMMIT;
printf(" *** normal ended ***\n");
FIN:
if (input != NULL) {
fclose(input);
}
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL WHENEVER SQLWARNING CONTINUE;
EXEC SQL DISCONNECT;
return(0);
}
void abnormalend()
{
int wsqlcode;
if (input != NULL) {
fclose(input);
}
wsqlcode = -SQLCODE;
printf("\n*** HiRDB SQL ERROR SQLCODE = %d \n", wsqlcode);
printf("SQLERRMC = %s\n", SQLERRMC);
EXEC SQL ROLLBACK;
EXEC SQL DISCONNECT;
exit(1);
}
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.