SQL 解説書

WHENEVER

WHENEVER ステートメントは、 指定した例外条件が発生した時点で実行するアクションを指定します。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込む方法のみ可能です。 これは、実行可能ステートメントではありません。 このステートメントは REXX ではサポートされません。

許可

権限は不要です。

構文

>>-WHENEVER----+-NOT FOUND--+----------------------------------->
               +-SQLERROR---+
               '-SQLWARNING-'
 
>-----+-CONTINUE--------------------------+--------------------><
      '--+-GOTO--+---+----+---host-label--'
         '-GO TO-'   '-:--'
 

説明

NOT FOUND、SQLERROR、または SQLWARNING の各文節は、 例外条件のタイプの指定に使用されます。

NOT FOUND
SQLCODE が +100、または SQLSTATE が '02000' になる条件を指定します。

SQLERROR
SQLCODE が負になる条件を指定します。

SQLWARNING
警告状態 (SQLWARN0 が 'W') または SQL 戻りコードが +100 以外の正の値になる条件を指定します。

CONTINUE または GO TO の各文節は、 指定したタイプの例外条件が生じた場合に行うアクションを指定します。

CONTINUE
ソース・プログラムの次に続く命令を実行します。

GOTO または GO TO host-label
host-label で識別されるステートメントに制御を渡します。 host-label には、単一のトークンを指定します。 オプションとして、その先頭にコロンを付けることができます。 トークンの形式は、ホスト言語によって異なります。

WHENEVER ステートメントには、以下の 3 つのタイプがあります。

プログラムの実行可能な SQL ステートメントはいずれも、 各タイプの暗黙のまたは明示的な WHENEVER ステートメントの効力範囲内にあります。 WHENEVER ステートメントの効力範囲は、プログラムのステートメントの実行順序ではなく、 ステートメントのリスト順序に関連しています。

SQL ステートメントは、 ソース・プログラムでその SQL ステートメントよりも前に指定されている各タイプの最後の WHENEVER ステートメントの効力範囲内にあります。 いずれかのタイプの WHENEVER ステートメントが SQL ステートメントよりも前に指定されていない場合、 その SQL ステートメントは、CONTINUE が指定されたそのタイプの暗黙の WHENEVER ステートメントの効力範囲内にあります。

次の C の例では、エラーが発生した場合に HANDLERR へ進みます。 警告コードを生成された場合は、プログラムの通常フローを続行します。 データが戻されない場合には、ENDDATA に進みます。

   EXEC SQL WHENEVER SQLERROR GOTO HANDLERR;
   EXEC SQL WHENEVER SQLWARNING CONTINUE;
   EXEC SQL WHENEVER NOT FOUND GO TO ENDDATA;


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]