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
オプションと同様に、エラーの発生時に変数の値をオペレーティング・システムに返します。ノート:
WHENEVER
SQLERROR
コマンド内で使用するバインド変数は、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
: 処理を継続する前に、指定したコマンドを実行します。複数のコマンドは、それぞれセミコロン(;
)で区切ります。その他のエラーでトリガーされるコマンドがある場合は、それらのエラーが別のアクションを引き起こす可能性があり、場合によってはループ状態に陥ることもあります。