例外の理解
例外について
例外とは、プログラムの実行中に(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によって暗黙的に呼び出され、例外ハンドラを使用して捕捉できます。 |
ユーザー定義のエラー |
アプリケーションによって定義され、呼び出されるエラー |
これらは、宣言部で宣言する必要があります。開発者が明示的に例外を呼び出します。 |