pl/sql にはエラーハンドリング用に以下の必要最低限な例外だけが定義されている。これらは sys.standard パッケージ に定義されている內容である。一見すると例外の數が非常に少ないが、この程度の例外といくつかのユーザ定義例外だけで結構組みあげることができてしまう。
その中でも、主に使うのは dup_val_on_index、no_data_found、timeout_on_resource、others に集中すると思う。
もちろん、これ以外にも多くのストアドパッケージに固有の例外が定義されているので、それを使うこともある。特にファイル i/o などのパッケージを使用する場合には例外処理(ファイナル処理)を必ず行ない、ファイルをオープンしたままにはしないなどの配慮を行なう。
例外名
ora-***xx
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
-1invalid_cursor
ora-01001
-1001
invalid_number
ora-01722
-1722
login_denied
ora-01017
-1017
no_data_found
ora-01403
100no_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
-51too_many_rows
ora-01422
-1422
userenv_commitscn_error
ora-1725
-1725
transaction_backed_out
ora-00061
-61value_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預定義異常
異常 說明 access into null 未定義物件 case not found case 中若未包含相應的 when 並且沒有設定 else 時 collection is null 集合元素未初始化 curser already open 游標已經開啟 dup val on index 唯...
PL SQL 學習筆記 (13)例外之自定義例外
自定義例外 定義變數,型別是 exception 使用raise拋出自定義例外。例子 查詢50號部門的員工姓名 1 自定義例外 查詢50號部門的員工姓名 2set serveroutput on34 declare5 定義游標,代表50號部門的員工姓名 6cursor cemp is select ...
PL SQL基礎 定義並使用變數
介紹 在編寫pl sql程式時,可以定義變數和常量 在pl sql程式中包括有 標量型別 復合型別 參照型別 lob 標量 常用型別 在編寫pl sql塊時,如果要使用變數,需在定義部分定義變數。pl sql中定義變數和常量的語法如下 定義乙個變長字串 v ename varchar2 10 定義乙...