スケーラブルデータベースサーバ 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.