Oracle例外定义
例外名 | 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
- アトミック・ヌル のコレクションに対して操作を行なった場合
コンストラクタを呼び出してコレクションを初期化する。
- 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: 数値が無効です。
- USERENV_COMMITSCN_ERROR
- USERENV('COMMITSCN') を INSERT/UPDATE 以外で使用時に発生。
⇒ システム変更番号
- VALUE_ERROR
- 数値のオーバーフローや NOT NULL 制約に違反している。
参考: ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます
- OTHERS
- すべての例外をあらわす。
-
EXCEPTION WHEN DUP_VAL_ON_INDEX THEN ---RAISE_APPLICATION_ERROR(-20000,'It is will not be repeated'); ROLLBACK; WHEN others then dbms_output.put_line('other error');
oracle判断是否执行成功 begin insert into ... -- rowcount 表示影响的行数,如果为0表示没有成功插入 if sql%rowcount > 0 then commit; else rollback; end if; end; 热心网友