暗黙カーソル
PL/SQL において、すべての SQL は カーソル によって実行される。
パッケージ、ストアドファンクション、ストアドプロシージャ において、
カーソルを定義せずにソースコートに埋め込まれている DML(SELECT 含む) は暗黙カーソルによって実行される。
PL/SQL における暗黙カーソルの識別子は SQL である。
対称的にカーソルを定義して DML を実行している場合には 明示カーソルと呼ばれる。その場合にもカーソル識別子から以下のプロパティを参照することができる(BULK_〜を除く)。
暗黙カーソル SQL の属性値(プロパティ)
ユーザー参照できる暗黙カーソルの識別子は、SQL 一つしかないため、直前に実行した SQL 文の結果の内容のみを保持する。
属性値は SQL%ROWCOUNT などのように '%' を使用して参照する。
カーソル属性 | 意味 | タイプ |
FOUND | カーソルで実行した SQL に該当するものがある、ない | TRUE , FALSE |
NOTFOUND | FOUND 属性の論理的な逆 | TRUE , FALSE |
ISOPEN | カーソルがオープン中である、でない(※1) | TRUE , FALSE |
ROWCOUNT | DML によって影響のあった行数 UPDATE, DELETE (SELECT 含む(※2)) | 数値 (>= 0) |
BULK_ROWCOUNT | バルク操作によって影響のあった行数の配列 (暗黙カーソルのみの属性) | 配列 |
BULK_EXCEPTIONS | バルク操作によって発生した例外の配列 (暗黙カーソルのみの属性) | 配列 |
(※1) カーソルに対応した SQL が終了すると「SQL カーソル」(≠明示カーソル)は自動で閉じる。つまり PL/SQL 上では暗黙カーソルが OPEN している状態は検出できない。(常に FALSE)
(※2) SELECT 時の ROWCOUNT は検索に該当する総件数ではなく、フェッチ処理した件数が格納される。=フェッチ操作毎にカウントアップしていく。
BULK_ROWCOUNT
SQL%BULK_EXCEPTIONS(index)
UPDATE または DELETE 操作によって影響を受けた行数 (INSERT 時には無い)
BULK_EXCEPTIONS
SQL%BULK_EXCEPTIONS.COUNT
バルク処理で発生した例外の件数
SQL%BULK_EXCEPTIONS(index).ERROR_INDEX
バルク処理で発生した例外のコレクションの要素番号
SQL%BULK_EXCEPTIONS(index).ERROR_CODE
バルク処理で発生した例外のエラーコード (SQLCODE)
関連事項