PL/SQL 事前定義例外一覧

http://www.shift-the-oracle.com/plsql/exception/predefined-exception.html

PL/SQL 事前定義例外一覧

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

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

例外名 ORA-XXXXX SQLCODE
ACCESS_INTO_NULL ORA-06530 -6530
CASE_NOT_FOUND ORA-06592 -6592
COLLECTION_IS_NULL ORA-06531 -6531
CURSOR_ALREADY_OPEN ORA-06511 -6511
DUP_VAL_ON_INDEX ORA-00001 -1
INVALID_CURSOR ORA-01001 -1001
INVALID_NUMBER ORA-01722 -1722
LOGIN_DENIED ORA-01017 -1017
NO_DATA_FOUND ORA-01403 100
NO_DATA_NEEDED ORA-06548 -6548
NOT_LOGGED_ON ORA-01012 -1012
PROGRAM_ERROR ORA-06501 -6501
ROWTYPE_MISMATCH ORA-06504 -6504
SELF_IS_NULL ORA-30625 -30625
SUBSCRIPT_BEYOND_COUNT ORA-06533 -6533
SUBSCRIPT_OUTSIDE_LIMIT ORA-06532 -6532
SYS_INVALID_ROWID ORA-01410 -1410
STORAGE_ERROR ORA-06500 -6500
TIMEOUT_ON_RESOURCE ORA-00051 -51
TOO_MANY_ROWS ORA-01422 -1422
USERENV_COMMITSCN_ERROR ORA-1725 -1725
TRANSACTION_BACKED_OUT ORA-00061 -61
VALUE_ERROR ORA-06502 -6502
ZERO_DIVIDE ORA-01476 -1476
OTHERS - -
COLLECTION_IS_NULL
アトミック・ヌル のコレクションに対して操作を行なった場合
コンストラクタを呼び出してコレクションを初期化する。
CURSOR_ALREADY_OPEN
カーソルの二重オープン
DUP_VAL_ON_INDEX
一意性の制約違反
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
すべての例外をあらわす。

你可能感兴趣的:(pl/sql)