Top > SQL*Plus > WHENEVER SQLERROR

SQL、PL/SQL レベルのエラーハンドル

WHENEVER SQLERROR はコマンドの実行前に SQL コマンドや PL/SQL ブロックレベルのエラーが発生した場合の処理を事前に定義しておくためのコマンド

  • 短縮形 なし

例えば UPDATE not_exists_table_name SET ...で指定したテーブルが存在しない場合に発生する。

WHENEVER SQLERROR コマンド

WHENEVER SQLERROR コマンドの構文

EXIT(終了)する場合

WHENEVER SQLERROR
  EXIT [ SUCCESS | FAILURE | WARNING | 戻り値(※1)] [ COMMIT | ROLLBACK ]

CONTINUE(継続)する場合

WHENEVER SQLERROR
  CONTINUE [ COMMIT | ROLLBACK | NONE ]

(※1) 戻り値には 定数、DEFINE による変数、VARIBLE による変数を使用できる。

WHENEVER SQLERROR EXIT

EXIT(終了)する場合には SQL*Plus の終了ステータスの指定と トランザクションコミット するか ロールバック するかを指定する。

EXIT のオプションパラメータを省略した場合には SUCCESS と COMMIT がデフォルトになる。

WHENEVER SQLERROR EXIT SUCCESS COMMIT

SQLERROR の EXIT オプションには WHENEVER OSERROR にはない終了コード WARNING が用意されている。

SQL レベルのエラー時に SQL*Plus の終了コードに MY_SQLERROR_CODE(=100) を設定してロールバックするスクリプト例

--- スクリプト開始
-- SQL エラーが発生した場合は MY_SQLERROR_CODE=100 を戻す宣言
DEFINE MY_SQLERROR_CODE 100
--
WHENEVER SQLERROR EXIT MY_SQLERROR_CODE ROLLBACK
... スクリプト処理の開始

WHENEVER SQLERROR CONTINUE

CONTINUE(継続)する場合には現行トランザクションをどのようにするかを指定する。省略時のデフォルトは NONE(なにもしないで継続する)

 WHENEVER SQLERROR CONTINUE NONE
 


EXIT のステータスコードについて

[EXIT、QUIT] のステータスコードについて を参照

関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)