用途
Oracle動的SQLでは、選択リストの値がホスト変数に割り当てられ、問合せが戻した1行または複数の行が取り出されます。ANSI動的SQL方法4については、FETCH DESCRIPTOR(実行可能埋込みSQL)を参照してください。
前提条件
まず、OPEN文を使用してカーソルを先にオープンする必要があります。
構文
キーワードおよびパラメータ
使用上の注意
FETCH文はアクティブ・セットの行を読み取り、結果が含まれる出力変数の名前を示します。対応付けられたホスト変数がNULLの場合、インジケータの値は-1に設定されます。また、カーソルに対する最初のFETCH文は、必要に応じてアクティブ・セットの行をソートします。
出力ホスト変数のサイズは取り出された行数を示し、FOR句は値を示します。データを取得するホスト変数は、すべてがスカラーか、あるいはすべてが配列であることが必要です。スカラーの場合は、Oracleは1行のみフェッチします。配列の場合、Oracleは配列を満たすのに十分な数の行をフェッチします。
配列ホスト変数は、サイズが異なってもかまいません。この場合、Oracleがフェッチする行数は、次の値のうち小さい方です。
最小の配列のサイズ
オプションのFOR句の:array_sizeの値
フェッチする行数は、実際に問合せを満たす行数によってさらに限定できます。
FETCH文が、問合せで戻された行すべてを取得しなかった場合、カーソルは戻された次の行に配置されます。問合せで戻された最後の行を取得すると、次のFETCH文を実行すると、SQLCAのSQLCODE要素にエラー・コードが戻されることになります。
FETCH文にはAT句は含まれません。カーソルによってアクセスされるデータベースは、DECLARE CURSOR文で指定する必要があります。
FETCH文では、アクティブ・セット内を前方向にのみ進めます。すでにフェッチした行に戻る場合は、カーソルを再オープンして各行を順番に取り出す必要があります。アクティブ・セットを変更するには、新しい値をカーソルの問合せの入力ホスト変数に割り当て、カーソルを再オープンします。
Oracleの記述子の詳細は、FETCH文を参照してください。
例
EXEC SQL DECLARE emp_cursor CURSOR FOR SELECT job, sal FROM emp WHERE deptno = 30; EXEC SQL OPEN emp_cursor; ... EXEC SQL WHENEVER NOT FOUND GOTO ... for(;;) { EXEC SQL FETCH emp_cursor INTO :job_title1, :salary1; ... }
関連項目