SQL、PL/SQLエラー時の対処
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と同じですので詳しくはこちらをご覧ください。

Back to top

Information