>>--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 です。
The following example shows the WHENEVER statement in use:
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.