WHENEVER
WHENEVER ステートメントは、指定した例外条件が発生した場合にとるべきアクションを指定します。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込んで使用します。それ以外の使用法はありません。 このステートメントは、実行可能ステートメントではありません。 Java™ および REXX では指定できません。REXX におけるエラー処理の説明については、 「組み込み SQL プログラミング」トピック集を参照してください。
権限
権限は不要です。
構文
>>-WHENEVER--+-NOT FOUND--+--+-CONTINUE---------------------+-->< +-SQLERROR---+ '-+-GOTO--+--+---+--host-label-' '-SQLWARNING-' '-GO TO-' '-:-'
説明
NOT FOUND、SQLERROR、または SQLWARNING 文節は、例外条件のタイプを識別するために使用します。
- NOT FOUND
- SQLSTATE が '02000' に、または SQLCODE が +100 になる結果をもたらす、すべての条件を識別します。
- SQLERROR
- 最初の 2 文字が '00'、'01'、または '02' ではない SQLSTATE 値となる条件を識別します。
- SQLWARNING
- 最初の 2 文字が '01' である SQLSTATE 値となる条件、 または警告状態 (SQLWARN0 の値が 'W') となる条件を識別します。
CONTINUE または GO TO 文節は、指定したタイプの例外条件が存在した場合 に、次に実行するステートメントを指定するのに使用します。
- CONTINUE
- ソース・プログラムにある、次の順番の命令を指定します。
- GOTO または GO TO host-label
- ホスト・ラベル によって識別されるステートメントを実行するように指定します。 ホスト・ラベルの部分には、単独のトークンを指定します (必要に応じて、トークン前にコロンを付けます)。 このトークンの形式は、ホスト言語によって異なります。 例えば、COBOL プログラムでは、セクション名 または修飾のない段落名 を指定します。
注
WHENEVER ステートメントの有効範囲: プログラム内のそれぞれの実行可能 SQL ステートメントは、 どれか 1 つのタイプの暗黙または明示的な WHENEVER ステートメントの有効範囲内に含まれます。 WHENEVER ステートメントの有効範囲は、プログラム内のステートメントのリスト順によって決まり、 実行順序には関連がありません。
SQL ステートメントは、ソース・プログラム内でそのステートメントの前に指定されている 最後の WHENEVER ステートメント (上記の 3 つのタイプのどれか) の有効範囲内に含まれます。 SQL ステートメントの前に、いずれのタイプの WHENEVER ステートメントも指定されていなければ、 その SQL ステートメントは、CONTINUE が指定されているタイプの暗黙的 WHENEVER ステートメントの有効範囲に含まれます。
SQL は、COBOL、C、および RPG でのネストされたプログラムをサポートします。 しかし、SQL は通常の COBOL、C、または RPG の有効範囲規則に従いません。 つまり、ネストされたプロシージャーよりも前にプログラム・ソースで指定され た最後の WHENEVER ステートメントが、まだ、そのネストされたプロシー ジャーについては有効です。 WHENEVER ステートメントで参照されるラベルは、 その内部プログラムで複写されたものである必要があります。他に、 その内部プログラムで新しい WHENEVER ステートメントを指定することもできます。
例
以下のステートメントは、COBOL プログラム内に組み込むことができます。
例 1: ステートメントでエラーが発生した場合は、必ずラベル HANDLER に進む。
EXEC SQL WHENEVER SQLERROR GOTO HANDLER END-EXEC.
例 2: どのステートメントで警告が発生しても処理は続行する。
EXEC SQL WHENEVER SQLWARNING CONTINUE END-EXEC.
例 3: データを戻すべきステートメントがデータを戻さなかった場合は、ラベル ENDDATA に進む。
EXEC SQL WHENEVER NOT FOUND GOTO ENDDATA END-EXEC.