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の終了前に実行する処理を、次のいずれかで指定します。SUCCESSEXITのデフォルト・オプションです。

    • SUCCESSFAILUREまたはWARNING: ttIsqlがすべてのSQLエラーを終了した後で、SUCCESS(値0)、FAILURE(値1)またはWARNING(値2)をオペレーティング・システムに返します。

    • Number: リターン・コードとしてオペレーティング・システムに返す、0から255の数値を指定します。ttIsqlが終了した場合は、適切なオペレーティング・システム・コマンドでエラーのリターン・コードを取得できます。たとえば、Cシェル(csh)でecho $statusを使用するか、Bourneシェル(sh)でecho $?を使用して、リターン・コードを表示できます。

      リターン・コードはバッチ・コマンド・ファイル内で取得および処理できるため、想定外のイベントをプログラムで検出し、そのイベントに対応することができます。

    • :BindVariable: variableコマンドによってttIsqlで以前に作成した値をバインド変数に返します。Numberオプションと同様に、エラーの発生時に変数の値をオペレーティング・システムに返します。

      ノート:

      WHENEVER SQLERRORコマンド内で使用するバインド変数は、LOBREFCURSOR、または配列関連のデータ型として定義することはできません。

    また、ttIsqlの終了前に、すべての変更をコミットするか、またはロールバックするかを指定できます。

    • COMMIT: 終了前にCOMMITを実行し、現在の接続で行われた変更のみを保存します。その他の接続は通常の切断処理で終了し、コミット前のすべての変更はロールバックされます。

    • COMMIT ALL: 終了前にCOMMITを実行し、すべての接続で行われた変更を保存します。

    • ROLLBACK: 終了前にROLLBACKを実行し、(デフォルトでは)現在の接続と他のすべての接続で行われた変更を破棄します。その他の接続は通常の切断処理で終了し、コミット前のすべての変更は自動的にロールバックされます。

  • CONTINUE: エラーが発生しても終了しません。SQLエラーが表示されますが、そのエラーによってttIsqlが終了することはありません。次のオプションでは、後続のttIsqlコマンドを実行する前の処理を指定できます。

    • NONE: これがデフォルトです。処理を継続する前のアクションはありません。

    • COMMIT: 処理を継続する前にCOMMITを実行し、現在の接続で行われた変更を保存します。

    • COMMIT ALL: 処理を継続する前にCOMMITを実行し、すべての接続で行われた変更を保存します。

    • ROLLBACK: 継続の前にROLLBACKを実行し、(デフォルトでは)現在の接続と他のすべての接続で行われた変更を破棄します。その他の接続は通常の切断処理で終了し、コミット前のすべての変更は自動的にロールバックされます。

  • SUPPRESS: すべてのエラー・メッセージを非表示にして、処理を継続します。

  • SLEEP: 処理を継続する前に、指定した時間(秒)だけスリープ状態になります。

  • EXECUTE: 処理を継続する前に、指定したコマンドを実行します。複数のコマンドは、それぞれセミコロン(;)で区切ります。その他のエラーでトリガーされるコマンドがある場合は、それらのエラーが別のアクションを引き起こす可能性があり、場合によってはループ状態に陥ることもあります。