8.2.5 埋込みSQL宣言節の不要化
(1) 概要
プリプロセサでは,/Eオプション(UNIX版の場合は-Eオプション)を指定すると,UAPソースファイル中の任意の箇所で宣言されているSQLのデータ型に対応した変数を,埋込み変数として使用できます。ただし,register記憶クラスの変数は,埋込み変数として使用できません。
変数の有効範囲は,UAPソースファイルを記述しているホスト言語の規則に従います。この機能を使用できるのは,C言語又はCOBOL言語でUAPソースファイルを記述している場合だけです。
この機能を使用すると,次のことができます。
-
変数宣言を,埋込みSQL開始宣言(BEGIN DECLARE SECTION)及び埋込みSQL終了宣言(END DECLARE SECTION)で囲まなくても,埋込み変数として使用できます。また,併用もできます。
-
大域変数,局所変数,及び関数の引数の有効範囲を,ホスト言語の文法に従って判定します。埋込み変数の有効範囲が異なれば,同じ名称の変数を宣言しても,異なる埋込み変数として区別されます。この場合,その変数を使用しているSQL文を含む最も内側の変数が指定されたとみなされます。
(2) 使用例
使用例を次に示します。
int fetchdata(long xtanka){
char xscode[5];
char xsname[17];
char xcol[3];
long xgryo;
:
EXEC SQL
DECLARE CR3 CURSOR FOR
SELECT SCODE,SNAME,COL,ZSURYO
FROM ZAIKO WHERE TANKA=:xtanka;
:
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 :xscode,:xsname,:xcol,:xgryo;
printf(" %4s %-16s %2s %8d %8d\n",
xscode, xsname, xcol, xtanka, xgryo);
}
}
OWARI: