PL/SQL 事前定義例外一覧

PL/SQL にはエラーハンドリング用に以下の必要最低限な例外だけが定義されている。 これらは SYS.STANDARD パッケージ に定義されている内容である。 一見すると例外の数が非常に少ないが、この程度の例外といくつかのユーザ定義例外だけで 結構組みあげることができてしまう。
その中でも、主に使うのは DUP_VAL_ON_INDEX、NO_DATA_FOUND、TIMEOUT_ON_RESOURCE、OTHERS に集中すると思う。
もちろん、これ以外にも多くのストアドパッケージに固有の例外が定義されているので、それを使うこともある。 特にファイル I/O などのパッケージを使用する場合には例外処理(ファイナル処理)を必ず行ない、ファイルをオープンしたままにはしないなどの配慮を行なう。

例外名称、エラーコード、SQLCODE 一覧表

例外名ORA-XXXXXSQLCODE
ACCESS_INTO_NULLORA-06530-6530
CASE_NOT_FOUNDORA-06592-6592
COLLECTION_IS_NULLORA-06531-6531
CURSOR_ALREADY_OPENORA-06511-6511
DUP_VAL_ON_INDEXORA-00001-1
INVALID_CURSORORA-01001-1001
INVALID_NUMBERORA-01722-1722
LOGIN_DENIEDORA-01017-1017
NO_DATA_FOUNDORA-01403100
NO_DATA_NEEDEDORA-06548-6548
NOT_LOGGED_ONORA-01012-1012
PROGRAM_ERRORORA-06501-6501
ROWTYPE_MISMATCHORA-06504-6504
SELF_IS_NULLORA-30625-30625
SUBSCRIPT_BEYOND_COUNTORA-06533-6533
SUBSCRIPT_OUTSIDE_LIMITORA-06532-6532
SYS_INVALID_ROWIDORA-01410-1410
STORAGE_ERRORORA-06500-6500
TIMEOUT_ON_RESOURCEORA-00051-51
TOO_MANY_ROWSORA-01422-1422
USERENV_COMMITSCN_ERRORORA-1725-1725
TRANSACTION_BACKED_OUTORA-00061-61
VALUE_ERRORORA-06502-6502
ZERO_DIVIDEORA-01476-1476
OTHERS--
COLLECTION_IS_NULL
アトミック・ヌル のコレクションに対して操作を行なった場合
コンストラクタを呼び出してコレクションを初期化する。
CURSOR_ALREADY_OPEN
カーソルの二重オープン
DUP_VAL_ON_INDEX
一意性の制約違反
ORA-00001: 一意制約に反しています
INVALID_CURSOR
オープンしていない カーソル に操作している、以下の IF 処理を参考に
IF cursor_name%ISOPEN THEN 〜
INVALID_NUMBER
数値に変換できない。SELECT DECODE(num_date, 1, 'aaa') 〜 などの数値項目に対して文字を変換すると発生したりする。(NVL 関数 でも同じ)
ORA-01722: 数値が無効です。
LOGIN_DENIED
ログインの失敗(拒否)
NO_DATA_FOUND
すべてのレコードが既にフェッチ済、もしくは 該当するものがない。
NOT_LOGGED_ON
接続が切断された。(接続中の場合には、サーバーのアラートログやクライアントの SQLNET.LOG を参照)
PROGRAM_ERROR
Oracle サポート行き。
STORAGE_ERROR
メモリエラー Oracle サポート行き。
SUBSCRIPT_BEYOND_COUNT
コレクション型において添え字が要素数を超過部分にアクセスしている場合に発生。
SUBSCRIPT_BEYOND_COUNT
コレクション型において添え字が有効範囲外。
TIMEOUT_ON_RESOURCE
SELECT 〜 FOR UPDATE NOWAIT のロック取得失敗に発生。
TOO_MANY_ROWS
単一レコードしか許されない部分で複数行処理戻されている。
SELECT 〜 INTO 〜に対して複数行戻す SQL になっている。
USERENV_COMMITSCN_ERROR
USERENV('COMMITSCN') を INSERT/UPDATE 以外で使用時に発生。
システム変更番号
TRANSACTION_BACKED_OUT
共有インスタンス の DML_ LOCKS 初期化パラメータの値がお互いに矛盾している。
VALUE_ERROR
数値のオーバーフローや NOT NULL 制約に違反している。
参考: ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます
ZERO_DIVIDE
ゼロ除算
OTHERS
すべての例外をあらわす。
 


関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)