ヘッダーをスキップ
Oracle Database PL/SQL言語リファレンス
11g リリース1(11.1)
E05670-03
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

例外ハンドラ

例外ハンドラは、呼び出された例外(ランタイム・エラーまたは警告状態)を処理します。 例外は、事前定義の例外またはユーザー定義の例外のいずれかです。 事前定義の例外は、実行時システムによって暗黙的(自動的)に呼び出されます。ユーザー定義の例外は、RAISE文またはDBMS_STANDARD.RAISE_APPLICATION_ERRORプロシージャを使用して明示的に呼び出す必要があります。 後者を使用すると、ユーザー定義の例外にエラー・メッセージを関連付けることができます。

構文

exception_handler ::=

exception_handler
exception_handler.gifの説明

statement ::=

キーワードとパラメータの説明

exception_name

事前定義の例外(ZERO_DIVIDEなど)または現行の有効範囲内で事前に宣言されているユーザー定義の例外の名前です。

OTHERS

ブロックの例外処理部で明示的に名前を指定していないすべての例外を表します。 OTHERSの使用はオプションで、ブロックの最後の例外ハンドラとしてのみ使用できます。 キーワードWHENに続く例外のリストの中では、OTHERSを使用できません。

WHEN

例外ハンドラの開始を知らせるキーワードです。 キーワードWHENに続けて、キーワードORで区切った例外のリストを指定すると、複数の例外で一連の同一文を実行できます。 リスト中のいずれかの例外が呼び出されると、それに関連付けられた文が実行されます。

使用上の注意

例外宣言はブロック、サブプログラム、またはパッケージの宣言部でのみ使用できます。 例外の有効範囲の規則は変数と同じです。 ただし、変数とは異なり、例外をパラメータとしてサブプログラムに渡すことができません。

例外のいくつかはPL/SQLによって事前に定義されています。 これらの例外のリストは、表11-1を参照してください。 PL/SQLは、事前定義済の例外をパッケージSTANDARDでグローバルに宣言しているため、ユーザーが宣言する必要はありません。

事前定義の例外を再宣言すると、ローカルな宣言がグローバルな宣言をオーバーライドするため、エラーが発生しやすくなります。 この場合は、ドット表記法を使用して、次のように事前定義の例外を指定する必要があります。

EXCEPTION
    WHEN invalid_number OR STANDARD.INVALID_NUMBER THEN ...

PL/SQLブロックの例外処理部はオプションです。 例外ハンドラはブロックの末尾に置く必要があります。 例外処理部はキーワードEXCEPTIONで始まります。 ブロックの例外処理部の終わりは、ブロックの終わりも示すキーワードENDです。 例外ハンドラから参照できる変数は、カレント・ブロックから参照できる変数のみです。

例外は、処理の続行が不可能、あるいは望ましくないようなエラーが発生した場合にのみ呼び出します。 呼び出された例外に対応する例外ハンドラがカレント・ブロックに存在しない場合、例外は次の規則に従って伝播します。

ブロックの例外処理部でアクティブになれる例外は一度に1つのみです。 このため、ハンドラの内側で例外が呼び出されると、カレント・ブロックの外側のブロックが、新しく呼び出された例外に対するハンドラを検索するための最初のブロックになります。 それ以降の例外の伝播は通常どおりに行われます。


例1-12「WHILE-LOOPを使用した制御」
例1-16「スタンドアロンPL/SQLプロシージャの作成」
例2-28「複数の重複したラベルを使用するブロック」
例5-35「TRIMを使用したコレクションのサイズの縮小」
例5-38「コレクションに関する例外」
例6-37「ROLLBACKの使用」
例7-13「妥当性チェックを使用したSQLインジェクションの回避」
例8-1「単純なPL/SQLプロシージャの宣言、定義および起動」
例10-3「emp_adminパッケージの作成」
例11-1「ランタイム・エラー処理」
例11-3「PL/SQL例外の有効範囲」
例11-9「PL/SQL例外の再呼出し」
例12-6「FORALLでのロールバックの使用」
例12-9「例外が発生しても継続するバルク操作」

関連トピック