カーソル属性 (PL/SQL)

各カーソルには一式の属性が付与されています。これらの属性により、アプリケーション・プログラムはカーソルの状態を検査できます。

これらの属性は、%ISOPEN、%FOUND、%NOTFOUND、および %ROWCOUNT です。
%ISOPEN
この属性を使用すると、カーソルがオープン状態であるかどうかを判別できます。 カーソルをパラメーターとして関数またはプロシージャーに渡す際、(カーソルのオープンを試行する前に) カーソルが既にオープン済みであるかどうかを把握しておくのは有益です。
%FOUND
この属性を使用すると、FETCH ステートメントの実行後に、カーソルに行が含まれるかどうかを判別できます。 FETCH ステートメントの実行に成功した場合、%FOUND 属性の値は TRUE です。 FETCH ステートメントの実行に失敗した場合、%FOUND 属性の値は FALSE です。 以下の場合に、結果は不明となります。
  • cursor-variable-name の値が NULL である。
  • cursor-variable-name の事前に宣言されているカーソルがオープンしていない。
  • 事前に宣言されているカーソルに対して最初の FETCH ステートメントが実行される前に、%FOUND 属性が評価される。
  • FETCH ステートメントの実行により、エラーが返される。

%FOUND 属性は、フェッチする行が残っていない場合に戻るエラーの有無を検査する条件ハンドラーの使用に代わる、有効な手段です。

%NOTFOUND
この属性は、%FOUND 属性とは論理的に反対です。
%ROWCOUNT
この属性を使用すると、カーソルのオープン以降にフェッチされた行の数を特定できます。

表 1は、特定のカーソル・イベントに関連付けられた属性値の要約です。

表 1. カーソル属性値の要約
カーソル属性 %ISOPEN %FOUND %NOTFOUND %ROWCOUNT
OPEN 前 FALSE 未定義 未定義 「Cursor not open」例外
OPEN 後、最初の FETCH 前 TRUE 未定義 未定義 0
最初に成功した FETCH 後 TRUE TRUE FALSE 1
n 番目に成功した FETCH 後 (最終行) TRUE TRUE FALSE n
n+1 番目の FETCH 後 (最終行の後) TRUE FALSE TRUE n
CLOSE 後 FALSE 未定義 未定義 「Cursor not open」例外