カーソルの結果セットから行を取得し、その行にある列の値を対応するホスト変数 (または SQLDA データ構造体で指定されたアドレス) に書き込みます。
構文:
>>--EXEC SQL--.-------------------.------->
+-FOR :host_integer-+
>-----.-------------.--FETCH---.-------------.-->
+-AT db_name--+ +---PREVIOUS--+
+---LAST------+
+---PRIOR-----+
+---FIRST-----+
+---NEXT------+
>-----cursor_name---.-------------------------------------.------->
+-USING DESCRIPTOR :sqlda_struct------+
| +--------------------------,-+|
| V ||
+-INTO--.-:hvar----------------------.+
+-:hvar:ivar-----------------+
+-:hvar-.-----------.-:ivar--+
+-INDICATOR-+
>--END EXEC--><
パラメーター:
:host_integer |
処理されるホスト配列要素の最大数を指定するホスト変数。PIC S9(4) COMP-5 または PIC S9(9) COMP-5 として宣言する必要があります。 |
AT db_name |
DECLARE DATABASE を使用して宣言されたデータベースの名前。この句は必須ではありません。省略すると、DECLARE CURSOR 文に関連付けられている接続に自動的に切り替わります (その接続が現在の接続とは異なる場合。DECLARE CURSOR 文の実行中のみ有効)。 下位互換用に提供されています。 |
cursor_name |
すでに宣言済みの、開いたカーソル。 |
:sqlda_struct |
事前に DESCRIBE 文によって値が格納され、出力値アドレスを含む SQLDA データ構造体。このオプションを使用できるのは、準備済みの SELECT 文によって宣言されたカーソルと併用する場合のみです。SELECT 文を準備するには、PREPARE 文を使用します。コロンを使用すると、他の埋め込み SQL 実装との互換性を確保できます。 |
:hvar |
データを受け取る 1 つ以上のホスト変数を識別します。 |
:ivar |
次のいずれかを指定します。
- 1 つ以上のホスト変数 (カンマ区切り)
- 1 つ以上のホスト変数およびインジケーター変数の組み合わせ (カンマ区切り)
|
例:
* Declare a cursor for a given SQL statement.
EXEC SQL DECLARE C1 CURSOR FOR
SELECT last_name, first_name FROM staff
END-EXEC
EXEC SQL OPEN C1 END-EXEC
* Fetch the current values from the cursor into the host variables
* and if everything goes ok, display the values of the host
* variables
PERFORM UNTIL SQLCODE NOT = ZERO
EXEC SQL
FETCH C1 INTO :lname,:fname
END-EXEC
IF SQLCODE NOT = ZERO AND SQLCODE NOT = 100
DISPLAY 'Error: Could not perform fetch'
DISPLAY SQLERRML
DISPLAY SQLERRMC
EXEC SQL DISCONNECT ALL END-EXEC
STOP RUN
END-IF
DISPLAY 'First name: 'fname
DISPLAY 'Last name : 'lname
DISPLAY SPACES
END-PERFORM
説明:
デフォルトでは、FETCH 文が次の行を取得しますが、一つ前の行、最後の行、前の行、または最初の行も指定できます。取得できる行がこれ以上ない場合は、SQLCODE が 100、SQLSTATE が「02000」に設定されます。
OPEN cursor_name 文は FETCH 文より前に記述し、カーソルは FETCH の実行中に開いておく必要があります。PREVIOUS、LAST、PRIOR、FIRST、または NEXT を使用する場合は、DECLARE CURSOR 文または SET SCROLLOPTION 文および SET CONCURRENCY 文を使用して適切なカーソル オプションも設定する必要があります。さらに、ホスト変数のデータ型は、対応するデータベース列のデータ型と互換性がなければなりません。
列の数がホスト変数の数よりも少ない場合は、SQLWARN3 の値が W に設定されます。エラーが発生した場合には、それ以上の列は処理されません。処理済みの列は元に戻りません。
別の方法として、:hvar 変数に、カーソル宣言文の選択リストにある列にそれぞれ対応する複数のフィールドを含む COBOL レコードを指定できます。この形式を使用する場合は、SQL コンパイラ指令の DB2 オプションを指定する必要があります。なお、この形式を使用すると、COBOL コンパイラが PREPARE INTO 文および DESCRIBE 文を拒否する点に注意してください。
ANSI92ENTRY を設定して、NULL 値を取得しようとすると、NULL インジケーターがなければ SQLCODE が -19425 に設定されます。ANSI92ENTRY が設定されない場合、SQLCODE は 0 になります。いずれの場合も、SQLSTATE は 22002 になり、SQLWARN2 は W になります。
INTO 句のホスト変数のいずれかが配列である場合、INTO 句のホスト変数はすべて配列にする必要があります。