>>--EXEC SQL---OPEN---cursor_name------------------------> >----.--------------------------------.----END-EXEC----->< +-USING DESCRIPTOR :sqlda_struct-+ | +- , -+ | | V | | +-USING :hvar--------------------+
cursor_name | 事前に宣言済みのカーソル。 |
:sqlda_struct | アプリケーションによって事前に構築された SQLDA データ構造。SQLDA データ構造には、各入力パラメーターのアドレス、データ型、および長さが含まれます。このオプションは、DECLARE 文で準備済みの SQL 文を参照するカーソルと併用する場合にのみ使用します。コロンを使用すると、他の埋め込み SQL 実装との互換性を確保できます。 |
:hvar | SELECT 文のパラメーター マーカーに対応する 1 つ以上の入力ホスト変数。このオプションは、DECLARE 文で準備済みの SQL 文を参照するカーソルと併用する場合にのみ使用します。 |
*Declare the cursor... EXEC SQL DECLARE C1 CURSOR FOR SELECT staff_id, last_name FROM staff END-EXEC IF SQLCODE NOT = ZERO DISPLAY 'Error: Could not declare cursor.' DISPLAY SQLERRMC DISPLAY SQLERRML EXEC SQL DISCONNECT ALL END-EXEC STOP RUN END-IF EXEC SQL OPEN C1 END-EXEC IF SQLCODE NOT = ZERO DISPLAY 'Error: Could not open cursor.' DISPLAY SQLERRMC DISPLAY SQLERRML EXEC SQL DISCONNECT CURRENT END-EXEC STOP RUN END-IF PERFORM UNTIL sqlcode NOT = ZERO *SQLCODE will be zero as long as it has successfully fetched data EXEC SQL FETCH C1 INTO :staff-staff-id, :staff-last-name END-EXEC IF SQLCODE = ZERO DISPLAY "Staff ID: " staff-staff-id DISPLAY "Staff member's last name: " staff-last-name END-IF END-PERFORM EXEC SQL CLOSE C1 END-EXEC IF SQLCODE NOT = ZERO DISPLAY 'Error: Could not close cursor.' DISPLAY SQLERRMC DISPLAY SQLERRML END-IF
この失敗は、COBOL コンパイラが (可能な場合) 01 レベル フィールドとその下位の 01 レベル "FILLER" フィールドを JVM タイプとしてコンパイルするために起こります。
正常なコンパイルを保証するには、オブジェクト タイプ (string、binary-long、BigDecimal など) ではなく従来の COBOL データ型 (PIC X(n)、COMP-3 など) をホスト変数に使用して、次のいずれかを行います。
このシナリオは、CALL 文を使用して呼び出されたストアド プロシージャには適用されません。
説明:
カーソルを静的な (準備されていない) SELECT 文で宣言する場合、SELECT 文にはホスト変数を含められますが、パラメーター マーカーを含めることはできません。ホスト変数の現在の値が OPEN 文の実行時に置き換えられます。静的に宣言されたカーソルについては、OPEN 文に USING :hvar または USING DESCRIPTOR :sqlda_struct オプションを含めることはできません。
カーソルを動的な (準備済みの) SELECT 文で宣言する場合、SELECT 文にはパラメーター マーカーを含められますが、ホスト変数を含めることはできません。パラメーター マーカーは、SELECT 文で列の値を使用できる任意の場所に記述できます。SELECT 文にパラメーター マーカーがある場合は、OPEN 文に、ホスト変数と同数の USING :hvar オプション、またはアプリケーションによってデータを書き込み済みの SQLDA データ構造を示す USING DESCRIPTOR :sqlda_struct オプションのどちらかを含める必要があります。
USING DESCRIPTOR :sqlda_struct オプションでは、プログラム変数の値は SELECT 文のパラメーター マーカーに置き換えられます。これらのプログラム変数は、SQLDA データ構造内の対応する SQLDATA 項目によってアドレス指定されます。
SELECT 文のパラメーター マーカーの数は、sqldata 項目 (USING DESCRIPTOR :sqlda_struct) または OPEN 文のホスト変数 (USING :hvar) の数と一致している必要があります。