プライマリ・コンテンツに移動
Oracle® Database Oracleプリコンパイラのためのプログラマーズ・ガイド
12c リリース1 (12.1)
B71398-03
目次へ移動
目次
索引へ移動
索引

前
次

FETCH (実行可能埋込みSQL)

FETCHの用途

選択リストの値を変数に割り当てて、問合せによって戻された1行以上の行を取得します。

FETCHの前提条件

OPEN文を使用して、まずカーソルをオープンする必要があります。

FETCHの構文

FETCHのキーワードおよびパラメータ

FOR :host_integer

配列ホスト変数を使用している場合、フェッチする行数を制限します。この句を省略した場合、Oracleは最小の配列を満たすのに十分な数の行をフェッチします。

カーソル

DECLARE CURSOR文を使用して宣言したカーソル。FETCH文は、カーソルに関連付けられた問合せにより選択された行のうち1行を戻します。

:cursor_variable

ALLOCATE文を使用して割り当てたカーソル変数。FETCH文は、カーソル変数に関連付けられた問合せにより選択された行のうちの1行を戻します。

INTO

フェッチしたデータを格納するホスト変数およびオプションのインジケータ変数のリストを指定します。これらのホスト変数およびインディケータ変数は、プログラム内で宣言されている必要があります。

USING

DESCRIBE文で事前に参照している記述子を指定します。この句は、動的埋込みSQL方法4以外では使用しないでください。また、カーソル変数を使用しているときも、USING句は適用されません。

FETCHの使用上の注意

FETCH文は、アクティブ・セットの行を読み取り、結果が含まれる出力変数の名前を付けます。対応付けられたホスト変数がNULLの場合、インディケータ変数の値は-1に設定されます。最初のカーソルのFETCH文は、必要に応じて、アクティブ・セットの行のソートも行います。

フェッチする行数は、出力ホスト変数のサイズおよびFOR句で指定した値で指定します。データを取得するホスト変数は、すべてがスカラーか、あるいはすべてが配列であることが必要です。スカラーの場合は、Oracleは1行のみフェッチします。配列の場合、Oracleは配列を満たすのに十分な数の行をフェッチします。

配列ホスト変数は、サイズが異なってもかまいません。この場合、Oracleがフェッチする行数は、次の値のうち小さい方です。

  • 最小の配列のサイズ

  • オプションのFOR句の:host_integerの値

フェッチする行数は、実際に問合せを満たす行数によってさらに限定できます。

FETCH文が、問合せで戻された行すべてを取得しなかった場合、カーソルは戻された次の行に配置されます。問合せで戻された最後の行を取得すると、次のFETCH文を実行すると、SQLCAのSQLCODE要素にエラー・コードが戻されることになります。

FETCHコマンドにはAT句がないので注意してください。カーソルでアクセスするデータベースは、DECLARE CURSOR文で指定する必要があります。

FETCH文では、アクティブ・セット内で進めるのは前方向のみです。すでにフェッチした行に戻る場合は、カーソルを再オープンして各行を順番に取り出す必要があります。アクティブ・セットを変更するには、新しい値をカーソルの問合せの入力ホスト変数に割り当て、カーソルを再オープンします。

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; 
...

FETCHの関連トピック

CLOSE(実行可能埋込みSQL)DECLARE CURSOR(埋込みSQLディレクティブ)OPEN(実行可能埋込みSQL)およびPREPARE(実行可能埋込みSQL)