Whenever Sqlerror

WHENEVER SQLERROR

構文

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

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

iSQL*Plusでは、SQLコマンドまたはPL/SQLブロックでエラーが発生した場合、指定した操作(デフォルトでは現行のスクリプトを停止)を実行し、フォーカスを作業領域に戻します。

[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コマンドが失敗すると、次のスクリプト内のコマンドは、iSQL*Plusの現行のスクリプトの処理を中止して、作業領域の入力領域にフォーカスを戻します。

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

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

SELECTコマンドが失敗すると、

次のSQLコマンド・エラーのため、iSQL*Plusは現行のスクリプトの処理を中止し、作業領域の入力領域にフォーカスを戻します。

WHENEVER SQLERROR EXIT SQL.SQLCODE
select column_does_not_exiSt from dual;
 
select column_does_not_exist from dual
       *
ERROR at line 1:
ORA-00904: invalid column name
 
Disconnected from Oracle.....

次の例は、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.....