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

前
次

スクロール可能カーソル

スクロール可能カーソルは、SQL文が実行され、実行中に処理された情報が格納される作業領域です。

カーソルが実行されると、結果セットと呼ばれる一連の行に問合せ結果が入れられます。結果セットは、順番にフェッチすることも、順不同でフェッチすることもできます。順不同の結果セットをスクロール可能カーソルと呼びます。

スクロール可能カーソルを使用すると、ユーザーは前から、後ろからまたはランダムな方法でデータベース結果セットの行にアクセスできます。これにより、プログラムは結果セットの任意の行をフェッチできます。詳細は、リリース9.2.0の『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。

スクロール可能なカーソルの使用について

次の文を使用して、スクロール可能カーソルを定義および操作します。

DECLARE SCROLL CURSOR

DECLARE <cursor name> SCROLL CURSOR文を使用して、スクロール可能カーソルに名前を付け、問合せに対応付けます。

スクロール可能カーソル用のOPEN

OPEN文は、スクロール不可カーソルの場合と同じように使用できます。

スクロール可能カーソル用のFETCH

FETCH文を使用すると、必要な行をランダムな方法でフェッチできます。アプリケーションでは、行を上方向へまたは下方向へフェッチしたり、最初または最後の行を直接フェッチしたり、または任意の1行をランダムにフェッチできます。

FETCH文には次のオプションがあります。

  1. FETCH FIRST

    結果セットの最初の行をフェッチします。

  2. FETCH PRIOR

    カレント行の直前の行をフェッチします。

  3. FETCH NEXT

    現在位置の次の行をフェッチします。これは、スクロール不可カーソルのFETCHに相当します。

  4. FETCH LAST

    結果セットの最後の行をフェッチします。

  5. FETCH CURRENT

    カレント行をフェッチします。

  6. FETCH RELATIVE n

    カレント行を基準にしてn番目の行をフェッチします。nはオフセットです。

  7. FETCH ABSOLUTE n

    n番目の行をフェッチします。nは、結果セットの始まりからのオフセットです。

次の例は、結果セットの最後の行をFETCHする方法を示します。

EXEC SQL DECLARE emp_cursor SCROLL CURSOR FOR
SELECT ename, sal FROM emp WHERE deptno=20;
...
EXEC SQL OPEN emp_cursor;
EXEC SQL FETCH LAST emp_cursor INTO :emp_name, :sal;
EXEC SQL CLOSE emp_cursor;

スクロール可能カーソル用のCLOSE

CLOSE文は、スクロール不可カーソルの場合と同じように使用できます。

注意:

スクロール可能カーソルをREFカーソルとして使用することはできません。

CLOSE_ON_COMMITプリコンパイラ・オプション

CLOSE_ON_COMMITマイクロ・プリコンパイラ・オプションを使用すると、マクロ・オプションMODE=ANSIでCOMMITが実行されるときにすべてのカーソルをクローズするかどうかを選択できます。MODE=ANSIのとき、CLOSE_ON_COMMITのデフォルト値はYESです。明示的にCLOSE_ON_COMMIT=NOと設定すると、COMMITが実行されてもカーソルはクローズされず、カーソルを再オープンして解析する必要がなくなるためパフォーマンスが向上します。

関連項目:

PREFETCHプリコンパイラ・オプション

プリコンパイラ・オプションPREFETCHを使用すると、一定の行数をプリフェッチすることによって問合せの効率を上げることができます。これにより、必要なサーバーのラウンドトリップ回数とメモリー使用量全体が減少します。PREFETCHオプションで設定した行数は、標準の優先順位規則に従って、明示カーソルを含むすべての問合せに使用されます。インラインで使用する場合は、次に示すカーソル文の前にPREFETCHオプションを指定する必要があります。

  • EXEC SQL OPEN cursor

  • EXEC SQL OPEN cursor USING host_var_list

  • EXEC SQL OPEN cursor USING DESCRIPTOR desc_name

OPENを実行すると、問合せの実行時にプリフェッチする行数がPREFETCHの値によって指定されます。0 (プリフェッチなし)から65535までの値を設定できます。デフォルト値は1です。

注意:

PREFETCHオプションのデフォルト値は1で、ラウンドトリップごとに1つの行が戻されます。PREFETCHオプションを使用しないように選択する場合は、コマンドラインでPREFETCHオプションを0に設定して、明示的に無効にする必要があります。

LONGまたはLOB列が取り出される場合は、PREFETCHが自動的に無効になります。

注意:

PREFETCHを使用すると、主に単一行フェッチのパフォーマンスが向上します。配列フェッチの使用時には、PREFETCHは無効です。

注意:

PREFETCHオプションは、状況に応じて広範囲に使用する必要があります。特定のFETCH文のパフォーマンスが最適化されるように、適切なPREFETCH値を選択してください。そのためには、コマンドラインのPREFECTHオプションのかわりにインラインのPREFECTHオプションを使用します。

注意:

FETCH文にホスト変数とともに標識変数を使用するだけで、多数の大型アプリケーションのパフォーマンスを改善できます。

プリコンパイラ・アプリケーションで、単一行フェッチに対するPREFETCHオプションの使用による最大の利点が得られるように、標識変数を使用することをお薦めします。