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] のステータスコードについて を参照
関連事項