カーソル属性 (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は、特定のカーソル・イベントに関連付けられた属性値の要約です。
| カーソル属性 | %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」例外 |