>>--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) の数と一致している必要があります。