対応する DECLARE CURSOR 文で指定した SELECT 文を実行し、FETCH 文が一度に 1 行ずつアクセスする結果セットを生成します。
構文:
>>--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
説明:
カーソルを静的な (準備されていない) 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) の数と一致している必要があります。