WHENEVER SQLERRORコマンドの構文
SQLエラーが発生したときの対処方法は、WHENEVER SQLERRORコマンドを実行して規定できます。WHENEVER SQLERRORコマンドの詳細と使用例は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の「ttIsql内でのエラー・リカバリの指定」のコマンドを参照してください。
WHENEVER SQLERROR { ExitClause | ContinueClause | SUPPRESS |
SLEEP Number | ExecuteClause }
EXITを指定すると、エラーが発生した場合にttIsqlが常に終了します。ExitClauseは次のように設定します。
EXIT [ SUCCESS | FAILURE | WARNING | Number | :BindVariable ]
[ COMMIT | COMMIT ALL | ROLLBACK ]
CONTINUEを指定すると、エラーが発生した場合でもttIsqlによって次のコマンドが続行されます。ContinueClauseは次のように設定します。
CONTINUE [ COMMIT | COMMIT ALL | ROLLBACK | NONE ]
継続する前に指定のコマンドを実行します。ExecuteClauseは次のように設定します。
EXECUTE "Cmd1;Cmd2;...;"
WHENEVER SQLERRORコマンドには次のオプションがあります。
-
EXIT: エラーが発生した場合は常にttIsqlが終了します。ttIsqlの終了前に実行する処理を、次のいずれかで指定します。SUCCESSはEXITのデフォルト・オプションです。-
SUCCESS、FAILUREまたはWARNING:ttIsqlがすべてのSQLエラーを終了した後で、SUCCESS(値0)、FAILURE(値1)またはWARNING(値2)をオペレーティング・システムに返します。 -
Number: リターン・コードとしてオペレーティング・システムに返す、0から255の数値を指定します。ttIsqlが終了した場合は、適切なオペレーティング・システム・コマンドでエラーのリターン・コードを取得できます。たとえば、Cシェル(csh)でecho $statusを使用するか、Bourneシェル(sh)でecho $?を使用して、リターン・コードを表示できます。リターン・コードはバッチ・コマンド・ファイル内で取得および処理できるため、想定外のイベントをプログラムで検出し、そのイベントに対応することができます。
-
:BindVariable:variableコマンドによってttIsqlで以前に作成した値をバインド変数に返します。Numberオプションと同様に、エラーの発生時に変数の値をオペレーティング・システムに返します。ノート:
WHENEVERSQLERRORコマンド内で使用するバインド変数は、LOB、REFCURSOR、または配列関連のデータ型として定義することはできません。
また、
ttIsqlの終了前に、すべての変更をコミットするか、またはロールバックするかを指定できます。-
COMMIT: 終了前にCOMMITを実行し、現在の接続で行われた変更のみを保存します。その他の接続は通常の切断処理で終了し、コミット前のすべての変更はロールバックされます。 -
COMMIT ALL: 終了前にCOMMITを実行し、すべての接続で行われた変更を保存します。 -
ROLLBACK: 終了前にROLLBACKを実行し、(デフォルトでは)現在の接続と他のすべての接続で行われた変更を破棄します。その他の接続は通常の切断処理で終了し、コミット前のすべての変更は自動的にロールバックされます。
-
-
CONTINUE: エラーが発生しても終了しません。SQLエラーが表示されますが、そのエラーによってttIsqlが終了することはありません。次のオプションでは、後続のttIsqlコマンドを実行する前の処理を指定できます。-
NONE: これがデフォルトです。処理を継続する前のアクションはありません。 -
COMMIT: 処理を継続する前にCOMMITを実行し、現在の接続で行われた変更を保存します。 -
COMMIT ALL: 処理を継続する前にCOMMITを実行し、すべての接続で行われた変更を保存します。 -
ROLLBACK: 継続の前にROLLBACKを実行し、(デフォルトでは)現在の接続と他のすべての接続で行われた変更を破棄します。その他の接続は通常の切断処理で終了し、コミット前のすべての変更は自動的にロールバックされます。
-
-
SUPPRESS: すべてのエラー・メッセージを非表示にして、処理を継続します。 -
SLEEP: 処理を継続する前に、指定した時間(秒)だけスリープ状態になります。 -
EXECUTE: 処理を継続する前に、指定したコマンドを実行します。複数のコマンドは、それぞれセミコロン(;)で区切ります。その他のエラーでトリガーされるコマンドがある場合は、それらのエラーが別のアクションを引き起こす可能性があり、場合によってはループ状態に陥ることもあります。