埋め込み SQL 文を実行するたびに SQLCODE または SQLSTATE の値を明確に確認するには、多くのコードを記述する必要があります。この問題を回避するには、アプリケーションで WHENEVER 文を使用して、SQL 文の状態を確認します。
WHENEVER 文は実行文ではありません。埋め込み SQL 文が実行されるたびに、コンパイラ指令として、コンパイラにエラー処理コードを自動生成させます。
WHENEVER 文では、次に挙げる条件のそれぞれに対して、3 つのデフォルト動作 (CONTINUE、GOTO、または PERFORM) のいずれかを登録することができます。
ある特定の条件に対して WHENEVER 文を登録すると、以前に同じ条件に対して登録された WHENEVER 文の処理はすべて置換されます。
WHENEVER 文の適用範囲は、ソース プログラム内の物理的な位置で決まります。プログラムの実行順序における論理的な位置ではありません。例えば、次のコードで、最初の SELECT 文が何も返さない場合には、段落 C ではなく段落 A が処理されます。
EXEC SQL WHENEVER NOT FOUND PERFORM A END-EXEC. perform B. EXEC SQL SELECT col1 into :host-var1 FROM table1 WHERE col2 = :host-var2 END-EXEC. A. display "First item not found". B. EXEC SQL WHENEVER NOT FOUND PERFORM C. END-EXEC. C. display "Second item not found".
Oracle、Sybase、および Informix では、SQLWARN0 が「W」に設定されると、「SQLWARNING」句がトリガーされます。
Oracle
Oracle プリコンパイラ指令 MODE の設定に関わらず、SELECT 文または FETCH 文からデータが返されなかった場合には、常に NOT FOUND 条件がトリガーされます。
Informix
Informix では、WHENEVER 文内から STOP または CALL を実行できます。これは ANSI 標準に追加され、『INFORMIX-ESQL/COBOL Programmer's Manual』で説明されています。