アセンブラーでの SQL 記述子域 (SQLDA) の定義
プログラムが特定の SQL ステートメントを含んでいる場合は、少なくとも 1 つの SQL 記述子域 (SQLDA) を定義する必要があります。 使用されるコンテキストに応じて、SQLDA には準備済み SQL ステートメントまたはホスト変数に関する情報が格納されます。 この情報は、アプリケーション・プログラムまたは Db2 のいずれかによって読み取ることができます。
プロシージャー
SQL 記述子域を定義するには、次の手順で行います。
プログラム内で SQLDA を直接コーディングするか、次の SQL INCLUDE ステートメントを使用して、標準の SQLDA 宣言を要求します。
EXEC SQL INCLUDE SQLDA
制限事項 :TWOPASS SQL 処理オプションを使用しない場合は、データ記述子を参照する最初の SQL 文の前に SQLDA 宣言を配置する必要があります。
例
ホスト言語(C、C++、 COBOL、 PL/I など)では、特定の複数行操作にホスト変数配列を使用できます。 しかし、 Db2 プリコンパイラは、アセンブラ用のホスト変数配列の宣言を認識しません。 ただし、次の例に示すように、SQLDA宣言を使用して、アセンブラープログラムで同様の結果を得ることができます。
- 複数行 FETCH のアセンブラーによるサポートは、INTO DESCRIPTOR 文節のある FETCH ステートメントに限定されます。 以下に例を示します。
EXEC SQL FETCH NEXT ROWSET FROM C1 FOR 10 ROWS X INTO DESCRIPTOR :SQLDA - 複数行 INSERT のアセンブラーによるサポートは、次の場合に限定されます。
- VALUES 文節にスカラー値 (スカラー・ホスト変数またはスカラー式) を指定した静的複数行 INSERT ステートメント。 以下に例を示します。
EXEC SQL INSERT INTO T1 VALUES (1, CURRENT DATE, 'TEST') X FOR 10 ROWS - EXECUTE ステートメントに USING DESCRIPTOR 文節を指定して実行される、動的複数行 INSERT。 以下に例を示します。
ATR DS CL20 ATTRIBUTES FOR PREPARE S1 DS H,CL30 VARCHAR STATEMENT STRING MVC ATR(20),=C'FOR MULTIPLE ROWS ' MVC S1(2),=H'25' MVC S1+2(30),=C'INSERT INTO T1 VALUES (?) ' EXEC SQL PREPARE STMT ATTRIBUTES :ATR FROM :S1 EXEC SQL EXECUTE STMT USING DESCRIPTOR :SQLDA FOR 10 ROWS where the descriptor is set up correctly in advance according to the specifications for dynamic execution of a multiple-row INSERT statement with a descriptor - アセンブラーは複数行 MERGE をサポートしません。 ホスト変数配列を参照するMERGEステートメントは指定できません。
- VALUES 文節にスカラー値 (スカラー・ホスト変数またはスカラー式) を指定した静的複数行 INSERT ステートメント。 以下に例を示します。