JavaScriptが無効になっています。

この状態では一部の情報が表示されず、すべての機能を利用することができません。


Top > PLSQL プログラミング入門(1) > ユーザー定義例外

PL/SQL で使用する ユーザー定義例外の宣言と呼び出し

ユーザー定義例外の作成方法

PL/SQL の 宣言部には変数と同様に ローカルな例外 を宣言することでユーザー定義例外を作成することができる。
例外のスコープは、記述したブロック内でのみ有効。通常のユーザー定義例外には、すべてに共通して同じ エラーコード "+1" が割り当てられるが WHEN <例外名> THEN によって個別の例外として判別することができるので問題ない。

後述の EXCEPTION_INIT プラグマ を使用すると +1 以外の 「既存のエラー番号」 に名前を割り当てることができる。

{ DECLARE | CREATE FUNCTION .. | .. } 
 <例外名> EXCEPTION;
BEGIN
 <プログラム本体>
EXCEPTION
 WHEN <例外名> THEN
 <例外処理>
END;

ユーザー定義例外は Oracle によって発動されたものを処理するものではなく、プログラム中から RAISE <例外名> コマンド によって発動して使用する。

EXCEPTION 定義の例

ストアドプロシージャ内で ユーザー定義例外 eInvalidParam を使用した例

SQL> create or replace procedure is_oct(p_octstr in varchar2)
 2 is
 3   eInvalidParam  EXCEPTION;
 4 begin
 5   if (ltrim(p_octstr, '01234567') is not null) then
 6       raise eInvalidParam;
 7   end if;
 8   dbms_output.put_line('8進数です');
 9 exception
 10  when eInvalidParam then
 11   dbms_output.put_line('8進数ではありません');
 12 end;
 13 /
SQL> call is_oct('800');
8進数ではありません

オラクルエラー番号に例外名を割り当てる EXCEPTION_INIT プラグマ

エラー番号と ユーザー定義例外名 を関連付けするプラグマ EXCEPTION_INIT

Oracle の例外は ORA-00001 から ORA-40000 台までの多くのエラー番号が定義されている。しかし 「例外名」が定義されているものは一部のエラー番号だけである。代表的な例外の約 20 種類は PL/SQL 事前定義例外 として定義済なので宣言なしで利用することができる。また、組み込みパッケージを使用する場合にもパッケージに例外が定義されているものも多い。 ⇒ 例 UTL_FILE パッケージにおける例外

そこで、事前定義されていない(または、既成の例外名を上書きして)エラー番号を PL/SQL から例外処理したい場合には、その番号に例外名を割り当てることで例外をキャッチする。

EXCEPTION_INIT の使用例

ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます。に好きな例外名(eBufferOver) を割り当てる。

SQL> declare
 2   vSmallChar   varchar2(8);
 3   eBufferOver   EXCEPTION;
 4   eBlackbox    EXCEPTION;
 5   PRAGMA EXCEPTION_INIT(eBufferOver, -6502);
 6   PRAGMA EXCEPTION_INIT(eBlackbox, -600);
 7 begin
 8   vSmallChar := '1234567890';
 9 exception
 10  when eBlackbox then
 11   dbms_output.put_line('私には手が負えないようです');
 12  when eBufferOver then
 13   dbms_output.put_line('文字列が長すぎます');
 14 end;
 15 /
文字列が長すぎます
 
PL/SQLプロシージャが正常に完了しました。

例として ORA-00600 に eBlackbox 、ORA-06502 に eBufferOver という例外名を割り当てているが、ORA-06502 は 既に VALUE_ERROR という例外名が定義されているので、実際のプログラミングでは VALUE_ERROR を使う。



(追記) (追記ここまで)

関連事項


AltStyle によって変換されたページ (->オリジナル) /