SQL、PL/SQLエラーが発生した場合、そのエラーをきっかけに何かを行いたいというときがあります。
そういう場合はwhenever sqlerrorコマンドを使用します。
whenever sqlerrorコマンドは、通常SQLコマンドまたはPL/SQLブロックの前の行に書きます。
下記の例ように複数書いた場合、直前の行に書いたwhenever sqlerrorコマンドが有効となります。
ですので、update文でエラーが発生した場合、
whenever sqlerror continue commit が有効となり、実行されます。
whenever sqlerror continue rollback
whenever sqlerror continue commit
update ・・・
またこのコマンドは、SQLコマンドまたはPL/SQLブロックのエラーによってトリガーされますので、正常にSQLコマンドまたはPL/SQLブロックが実行された場合はwhenever sqlerrorコマンドは実行されません。
また同様に、SQL*Plusコマンドのエラーでもトリガーされません。
whenever sqlerror
と入力するとこのコマンドの使用方法が表示されます。
whenever sqlerror continue
と入力するとSQLコマンドまたはPL/SQLブロックのエラーが発生した場合、そのまま次のコマンドへと継続されます。
whenever sqlerror continue none
は、
whenever sqlerror continue と同じです。
whenever sqlerror continue commit
と入力するとSQLコマンドまたはPL/SQLブロックのエラーが発生した場合、commitを実行してから次のコマンドへと継続されます。
whenever sqlerror continue rollback
と入力するとSQLコマンドまたはPL/SQLブロックのエラーが発生した場合、rollbackを実行してから次のコマンドへと継続されます。
以上のコマンドは全て継続するコマンドです。
逆にSQLコマンドまたはPL/SQLブロックのエラーが発生した場合、そこで終了したい場合があります。
そういう場合は
whenever sqlerror exit
と入力するとSQLコマンドまたはPL/SQLブロックのエラーが発生した場合、その時点でSQL*Plusを終了します。
終了するときにリターンコードを指定してSQL*Plusを終了することもできます。
この指定方法はwhenever oserrorと同じですので詳しくは
こちらをご覧ください。