すべての明示的なカーソルおよびカーソル変数には4つの属性があり、それぞれがデータ操作文の実行に関する有効な情報を戻します。
構文
cursor_attribute ::=
キーワードとパラメータの説明
cursor_name
現行の有効範囲の中で、事前に宣言されている明示カーソルを識別します。
cursor_variable_name
現行の有効範囲の中で、事前に宣言されているPL/SQLカーソル変数(またはパラメータ)を識別します。
%FOUND属性
カーソル属性で、カーソルまたはカーソル変数の名前に追加できます。 カーソルがオープンされてから最初のフェッチまでのcursor_name%FOUND
は、NULL
を戻します。 その後、直前のフェッチが行を戻した場合はTRUE
を戻し、直前のフェッチが行を戻さなかった場合はFALSE
を戻します。
host_cursor_variable_name
PL/SQLホスト環境で宣言され、バインド引数としてPL/SQLに渡されるカーソル変数を識別します。 ホスト・カーソル変数のデータ型は、PL/SQLカーソル変数の戻り型と互換性があります。 ホスト変数には、接頭辞としてコロンを付けてください。
%ISOPEN属性
カーソル属性で、カーソルまたはカーソル変数の名前に追加できます。 カーソルがオープンされていると、cursor_name%ISOPEN
はTRUE
を戻し、それ以外の場合はFALSE
を戻します。
%NOTFOUND属性
カーソル属性で、カーソルまたはカーソル変数の名前に追加できます。 カーソルがオープンされてから最初のフェッチまでのcursor_name%NOTFOUND
は、NULL
を戻します。 その後、直前のフェッチが行を戻した場合はFALSE
を戻し、直前のフェッチが行を戻さなかった場合はTRUE
を戻します。
%ROWCOUNT属性
カーソル属性で、カーソルまたはカーソル変数の名前に追加できます。 カーソルがオープンされると%ROWCOUNT
は0(ゼロ)になります。 最初のフェッチまでは、cursor_name%ROWCOUNT
は0(ゼロ)を戻します。その後は、これまでにフェッチした行数を戻します。 フェッチで行が戻されるたびに、数値は増加します。
使用上の注意
カーソルの属性は、すべてのカーソルおよびカーソル変数に適用されます。 たとえば、複数のカーソルをオープンし、%FOUND
または%NOTFOUND
を使用して、まだフェッチしていない行が残っているカーソルがどれかを判別できます。 同様に、%ROWCOUNT
を使用して、これまでにフェッチした行の数を知ることができます。
カーソルまたはカーソル変数をオープンしていない場合、%FOUND
、%NOTFOUND
あるいは%ROWCOUNT
でカーソルやカーソル変数を参照すると、事前定義の例外INVALID_CURSOR
が呼び出されます。
カーソルまたはカーソル変数をオープンすると、対応する問合せを満たす行が識別され、結果セットが形成されます。 行は、結果セットから一度に1行ずつフェッチされます。
SELECT
INTO
文が複数の行を戻した場合、PL/SQLによって事前定義の例外TOO_MANY_ROWS
が呼び出され、%ROWCOUNT
は、問合せを満たす行の実数ではなく、1に設定されます。
最初のフェッチの前は、%NOTFOUND
の評価結果はNULL
です。 FETCH
が正常に実行されない場合は、EXIT
WHEN
条件がTRUE
とならず、ループは終了しません。 安全のために、次のEXIT
文をかわりに使用できます。
EXIT WHEN c1%NOTFOUND OR c1%NOTFOUND IS NULL;
カーソル属性は、プロシージャ文では使用できますが、SQL文では使用できません。
関連トピック