プライマリ・コンテンツに移動
Pro*C/C++プログラマーズ・ガイド
12c リリース1(12.1)
B71397-03
目次へ移動
目次
索引へ移動
索引

前
次

FETCH (実行可能埋込みSQL)

用途

Oracle動的SQLでは、選択リストの値がホスト変数に割り当てられ、問合せが戻した1行または複数の行が取り出されます。ANSI動的SQL方法4については、FETCH DESCRIPTOR(実行可能埋込みSQL)を参照してください。

前提条件

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

構文

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

キーワードおよびパラメータ 説明

FOR :array_size

処理される行の数を格納するホスト変数。

処理される行数。

FOR integer

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

cursor

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

cursor_variable

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

INTO

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

host_variable

データを受け取るホスト変数。

indicator_variables

ホスト標識変数。

USING SQLDA_variable

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

使用上の注意

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

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

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

  • 最小の配列のサイズ

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

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

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

FETCH文にはAT句は含まれません。カーソルによってアクセスされるデータベースは、DECLARE CURSOR文で指定する必要があります。

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

Oracleの記述子の詳細は、FETCH文を参照してください。

この例では、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; 
    ... 
    }

関連項目