アセンブラーでの 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ステートメントは指定できません。