FOR
:host_integer
配列ホスト変数を使用している場合、フェッチする行数を制限します。この句を省略した場合、Oracleは最小の配列を満たすのに十分な数の行をフェッチします。
カーソル
DECLARE
CURSOR
文を使用して宣言したカーソル。FETCH
文は、カーソルに関連付けられた問合せにより選択された行のうち1行を戻します。
:cursor_variable
ALLOCATE
文を使用して割り当てたカーソル変数。FETCH
文は、カーソル変数に関連付けられた問合せにより選択された行のうちの1行を戻します。
フェッチしたデータを格納するホスト変数およびオプションのインジケータ変数のリストを指定します。これらのホスト変数およびインディケータ変数は、プログラム内で宣言されている必要があります。
USING
DESCRIBE
文で事前に参照している記述子を指定します。この句は、動的埋込みSQL方法4以外では使用しないでください。また、カーソル変数を使用しているときも、USING
句は適用されません。
FETCH
文は、アクティブ・セットの行を読み取り、結果が含まれる出力変数の名前を付けます。対応付けられたホスト変数がNULLの場合、インディケータ変数の値は-1に設定されます。最初のカーソルのFETCH
文は、必要に応じて、アクティブ・セットの行のソートも行います。
フェッチする行数は、出力ホスト変数のサイズおよびFOR
句で指定した値で指定します。データを取得するホスト変数は、すべてがスカラーか、あるいはすべてが配列であることが必要です。スカラーの場合は、Oracleは1行のみフェッチします。配列の場合、Oracleは配列を満たすのに十分な数の行をフェッチします。
配列ホスト変数は、サイズが異なってもかまいません。この場合、Oracleがフェッチする行数は、次の値のうち小さい方です。
最小の配列のサイズ
オプションのFOR
句の:host_integerの値
フェッチする行数は、実際に問合せを満たす行数によってさらに限定できます。
FETCH
文が、問合せで戻された行すべてを取得しなかった場合、カーソルは戻された次の行に配置されます。問合せで戻された最後の行を取得すると、次のFETCH
文を実行すると、SQLCAのSQLCODE
要素にエラー・コードが戻されることになります。
FETCH
コマンドにはAT
句がないので注意してください。カーソルでアクセスするデータベースは、DECLARE
CURSOR
文で指定する必要があります。
FETCH
文では、アクティブ・セット内で進めるのは前方向のみです。すでにフェッチした行に戻る場合は、カーソルを再オープンして各行を順番に取り出す必要があります。アクティブ・セットを変更するには、新しい値をカーソルの問合せの入力ホスト変数に割り当て、カーソルを再オープンします。
この例では、擬似コード埋込みSQLプログラムでのFETCH
コマンドの使用方法を示しています。
EXEC SQL DECLARE emp_cursor CURSOR FOR SELECT job, sal FROM emp WHERE deptno = 30; ... EXEC SQL WHENEVER NOT FOUND GOTO ... LOOP EXEC SQL FETCH emp_cursor INTO :job_title1, :salary1; EXEC SQL FETCH emp_cursor INTO :job_title2, :salary2; ... END LOOP; ...