12.53 WHENEVER SQLERROR

構文

WHENEVER SQLERROR {EXIT [SUCCESS | FAILURE | WARNING | n | variable  | :BindVariable] [COMMIT | ROLLBACK] | CONTINUE [COMMIT | ROLLBACK | NONE]}

SQLコマンドまたはPL/SQLブロックでエラーが発生した場合に、指定した操作(デフォルトはSQL*Plusを終了)を実行します。

 [SUCCESS | FAILURE | WARNING | n | variable | :BindVariable]

SQLコマンドまたはPL/SQLブロックでエラーが検出されたら、すぐに(ただし、エラー・メッセージを出力した後で)指定した操作を実行するようにSQL*Plusに指示します。SQL*Plusエラーの場合は、SQL*Plusは終了しません。

EXIT [SUCCESS | FAILURE | WARNING | n | variable | :BindVariable]

SQLコマンドまたはPL/SQLブロックでエラーが検出されたらすぐに(ただし、エラー・メッセージを出力した後で)終了するように、SQL*Plusに指示します。SQL*Plusエラーの場合は、SQL*Plusは終了しません。WHENEVER SQLERRORのEXIT句は、EXITコマンドと同じ構文規則に従います。詳細は、「EXIT」を参照してください。

CONTINUE

EXITオプションをオフにします。

COMMIT

終了または継続する前にCOMMITを実行し、データベースに対する保留中の変更を保存するようにSQL*Plusに指示します。

ROLLBACK

終了または継続する前にROLLBACKを実行し、データベースに対する保留中の変更を破棄するようにSQL*Plusに指示します。

NONE

継続する前に何の操作もしないようにSQL*Plusに指示します。

使用方法

WHENEVER SQLERRORコマンドは、SQLコマンドまたはPL/SQLブロックのエラーによってトリガーされます。SQL*Plusコマンド・エラーではトリガーされません。

次のスクリプト中のコマンドは、SQL UPDATEコマンドが失敗すると、SQL*Plusを終了し、SQLエラー・コードを戻します。

WHENEVER SQLERROR EXIT SQL.SQLCODE
UPDATE EMP_DETAILS_VIEW SET SALARY = SALARY*1.1;

次の例は、SQL*Plusコマンドでエラーが発生した後は、WHENEVER SQLERRORコマンドは実行されませんが、SQLコマンドまたはPL/SQLブロックでエラーが発生した場合は、実行されることを示します。

WHENEVER SQLERROR EXIT SQL.SQLCODE
column LAST_name headIing "Employee Name"
Unknown COLUMN option "headiing"

SHOW non_existed_option

次のPL/SQLブロック・エラーの場合、SQL*Plusが終了し、SQLエラー・コードが戻ります。

WHENEVER SQLERROR EXIT SQL.SQLCODE
begin
  SELECT COLUMN_DOES_NOT_EXIST FROM DUAL;
END;
/
SELECT COLUMN_DOES_NOT_EXIST FROM DUAL;
       *
ERROR at line 2:
ORA-06550: line 2, column 10:
PLS-00201: identifier 'COLUMN_DOES_NOT_EXIST' must be declared
ORA-06550: line 2, column 3:
PL/SQL: SQL Statement ignored

Disconnected from Oracle.....