WHENEVER

特定の条件を満たした際に、埋め込み SQL 文を実行した後のデフォルトのアクションを指定します。

構文:

>>--EXEC SQL---WHENEVER---.-NOT FOUND--.----------------->
                          +-SQLERROR---+
                          +-SQLWARNING-+ 

 >--.-CONTINUE--------.----END-EXEC---><
    +-PERFORM label---+
    +-GOTO stmt_label-+ 

パラメーター:

CONTINUE ソース プログラムの次の文を実行します。
PERFORM label 特定のエラー レベルを検出した際に実行するコードの段落または節を指定します。
GOTO stmt_label 特定のエラー レベルを検出した際に制御を行うプログラム内の場所を指定します。

説明:

WHENEVER 文は、NOT FOUND、SQLERROR、および SQLWARNING の各条件に応じて埋め込み SQL 文を実行した後のデフォルトのアクションを指定します。

条件 sqlcode
エラーなし 0
NOT FOUND 100
SQLWARNING +1
SQLERROR < 0 (負)

WHENEVER 文の範囲は、実行順序ではなく、ソース プログラム内の文の位置に関連します。デフォルトは、3 つの条件すべてに対して CONTINUE です。

例:

次に WHENEVER 文の使用例を示します。

     EXEC SQL WHENEVER sqlerror PERFORM errormessage1 END-EXEC

     EXEC SQL 
        DELETE FROM staff
        WHERE staff_id = 'hello' 
     END-EXEC

     EXEC SQL 
        DELETE FROM students
        WHERE student_id = 'hello'
     END-EXEC

     EXEC SQL WHENEVER sqlerror CONTINUE END-EXEC

     EXEC SQL 
        INSERT INTO staff VALUES ('hello')
     END-EXEC

     DISPLAY 'Sql Code is: ' SQLCODE
     EXEC SQL WHENEVER sqlerror PERFORM errormessage2 END-EXEC

     EXEC SQL 
        INSERT INTO staff VALUES ('hello again') 
     END-EXEC

     STOP RUN.

 errormessage1 SECTION.
     display "SQL DELETE error: " sqlcode
     EXIT.

 errormessage2 SECTION.
     display "SQL INSERT error: " sqlcode
     EXIT.