例外の理解

この項では、PL/SQLプログラミングにおける例外の概要を説明します。

例外について

例外とは、プログラムの実行中に(TimesTenによって暗黙的に、またはプログラムによって明示的に)呼び出されるPL/SQLエラーのことです。例外を処理するには、ハンドラでトラップするか、またはコール元の環境に伝播します。

たとえば、SELECT文が複数の行を戻す場合、TimesTenは実行時にエラー(例外)を戻します。次の例に示すとおり、TimesTenエラー8507が表示され、次に関連するORAエラー・メッセージが表示されます。(Oracle Databaseで元々定義されているORAメッセージが、TimesTenでも同様に実装されています。)

Command> DECLARE
          v_lname VARCHAR2 (15);
         BEGIN
          SELECT last_name INTO v_lname
          FROM employees
          WHERE first_name = 'John';
           DBMS_OUTPUT.PUT_LINE ('Last name is :' || v_lname);
          END;
          /

 8507: ORA-01422: exact fetch returns more than requested number of rows
 8507: ORA-06512: at line 4
The command failed.

プログラムが正常に完了するように、このような例外をPL/SQLブロックで処理できます。次に例を示します:

Command> DECLARE
          v_lname VARCHAR2 (15);
         BEGIN
          SELECT last_name INTO v_lname
          FROM employees
          WHERE first_name = 'John';
           DBMS_OUTPUT.PUT_LINE ('Last name is :' || v_lname);
         EXCEPTION
           WHEN TOO_MANY_ROWS THEN
           DBMS_OUTPUT.PUT_LINE (' Your SELECT statement retrieved multiple
           rows. Consider using a cursor.');
         END;
         /
 Your SELECT statement retrieved multiple rows. Consider using a cursor.
 
PL/SQL procedure successfully completed.

例外のタイプ

例外には3つのタイプがあります。

  • 事前定義例外: PL/SQLで定義されているエラー条件です。

  • 未定義例外: 標準のTimesTenエラーなどがあります。

  • ユーザー定義例外: アプリケーション固有の例外です。

TimesTenでは、次の3つのタイプの例外がOracle Databaseと同様に使用されます。

例外 説明 対処方法

事前定義されているTimesTenエラー

PL/SQLコードで最もよく発生する約20個のエラーの1つ

これらの例外は、宣言する必要がありません。TimesTenで事前に定義されています。エラーはTimesTenによって暗黙的に呼び出されます。

事前定義されていないTimesTenエラー

その他の標準のTimesTenエラー

これらは、アプリケーションの宣言部で宣言する必要があります。エラーはTimesTenによって暗黙的に呼び出され、例外ハンドラを使用して捕捉できます。

ユーザー定義のエラー

アプリケーションによって定義され、呼び出されるエラー

これらは、宣言部で宣言する必要があります。開発者が明示的に例外を呼び出します。