「ORA-00600: 内部エラー・コード・・・」 のようにOracle で定義されているエラーだけでなく ユーザーが独自にエラー番号を定義して例外を発生させるサンプルを掲載しています。
スポンサーリンク
ユーザーが定義できる番号は 「ORA-20000~ORA-20999」のようです。色々なパッケージなどでも独自でエラー番号を定義して使用していると思いますので、重複したりするかもしれません。
ユーザの独自例外の発生
CREATE OR REPLACE PROCEDURE TEST_PROC(userId VARCHAR2)
IS
BEGIN
-- 特定の場合のみ例外を発生させる
if(userId = '0010') then
-- 例外番号 -20500 のOracle例外を発生させる
raise_application_error(-20500, '何度いったらわかるの?もう来ないでください。');
else
-- 何もしない
null;
end if;
END;
/
上記のプロシージャを呼び出すと、例外が発生します。
ORA-20500: 何度いったらわかるの?もう来ないでください。
今までORA-(ハイフン)番号かと思っていましたが、ハイフンではなく、マイナスのようですね。ただ、それだけですが。
独自に定義した例外を捕捉 ( キャッチ ) する
例外を発生させることができるならば、捕捉することもできます。独自定義した例外を捕捉するサンプルです。詳細はコメントを参照ください。
CREATE OR REPLACE PROCEDURE TEST_PROC(userId VARCHAR2)
IS
/*
* 捕捉するための例外変数の定義し、
* 独自の例外番号との紐付けを行う
*/
personalBlockException EXCEPTION;
PRAGMA EXCEPTION_INIT(personalBlockException, -20500);
BEGIN
BEGIN
if(userId = '0010') then
-- 例外番号 -20500 のOracle例外を発生させる
raise_application_error(-20500, 'ユーはお断り');
else
-- 何もしない
null;
end if;
EXCEPTION
WHEN personalBlockException THEN -- ORA-20500 を捕捉する
dbms_output.put_line('エラーコード : ' || sqlcode);
dbms_output.put_line('エラーメッセージ: ' || sqlerrm);
/*
* エラーコード : -20500
* エラーメッセージ: ORA-20500: ユーはお断り
*/
END;
END;
/