スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド
オプションを指定すると,C言語の構造体を使用して,複数個の埋込み変数を一度に指定できます。
構造体は,次の箇所に埋込み変数として使用できます。
オプションについては,「8.2.2 UNIX環境でのプリプロセス」又は「8.2.3 Windows環境でのプリプロセス」のオプションの説明を参照してください。また,構造体を使用できるSQLについては,「8.2.8 プリプロセサの/E2,/E3オプションを指定した場合のポインタ,構造体,及び構造体修飾の使用可否」を参照してください。
構造体の使用例を次に示します。
struct {
char xscode[5];
char xsname[17];
char xcol[3];
long xgryo;
long xtanka;
} xrec;
:
EXEC SQL
DECLARE CR3 CURSOR FOR
SELECT SCODE,SNAME,COL,ZSURYO, TANKA FROM ZAIKO;
:
EXEC SQL OPEN CR3 ;
/* 見出し */
printf(" ***** 在庫表 リスト *****\n\n");
printf(" 商品コード 商品名 色 単価 現在庫量\n");
printf(" ---- ---------------- -- -------- --------\n");
EXEC SQL WHENEVER SQLERROR GOTO OWARI;
EXEC SQL WHENEVER NOT FOUND GOTO OWARI;
/* FETCH */
for(;;){
EXEC SQL FETCH CR3 INTO :xrec;
printf(" %4s %-16s %2s %8d %8d\n",
xrec.xscode, xrec.xsname, xrec.xcol, xrec.xtanka, xrec.xgryo);
}
OWARI:
:
埋込み変数として構造体を使用する場合に,標識変数も使用するときは,標識変数も構造体で宣言します。標識変数用の構造体の各メンバは,埋込み変数用の構造体の各メンバに,宣言順に対応させます。例を次に示します。
struct {
char xscode[5];
char xsname[17];
char xcol[3];
long xgryo;
long xtanka;
} xrec;
struct {
short xscode_ind;
short xsname_ind;
short xcol_ind;
short xgryo_ind;
short xtanka_ind;
} xrec_ind;
:
/* FETCH */
for(;;){
EXEC SQL FETCH CR3 INTO :xrec :xrec_ind;
printf(" %4s %-16s %2s %8d %8d\n",
xrec.xscode, xrec.xsname, xrec.xcol, xrec.xtanka, xrec.xgryo);
}
:
構造体へのポインタで埋込み変数を指定することもできます。ポインタが指す領域は,あらかじめユーザが確保しておく必要があります。
struct tag_xrec {
char xscode[5];
char xsname[17];
char xcol[3];
long xgryo;
long xtanka;
} *xrec_ptr;
struct tag_xrec_ind {
short xscode_ind;
short xsname_ind;
short xcol_ind;
short xgryo_ind;
short xtanka_ind;
} *xrec_ind_ptr;
:
/* FETCH */
xrec_ptr = (struct tag_xrec *)malloc(sizeof(struct tag_xrec));
xrec_ind_ptr = (struct tag_xrec_ind *)
malloc(sizeof(struct tag_xrec_ind));
for(;;){
EXEC SQL FETCH CR3 INTO :xrec_ptr :xrec_ind_ptr;
printf(" %4s %-16s %2s %8d %8d\n",
xrec_ptr->xscode, xrec_ptr->xsname,xrec_ptr->xcol,
xrec_ptr->xtanka, xrec_ptr->xgryo);
}
:
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.