WHENEVER 文

埋め込み SQL 文を実行するたびに SQLCODE または SQLSTATE の値を明確に確認するには、多くのコードを記述する必要があります。この問題を回避するには、アプリケーションで WHENEVER 文を使用して、SQL 文の状態を確認します。

WHENEVER 文は実行文ではありません。埋め込み SQL 文が実行されるたびに、コンパイラ指令として、コンパイラにエラー処理コードを自動生成させます。

WHENEVER 文では、次に挙げる条件のそれぞれに対して、3 つのデフォルト動作 (CONTINUE、GOTO、または PERFORM) のいずれかを登録することができます。

条件 SQLCODE の値
NOT FOUND 100
SQLWARNING +1
SQLERROR < 0 (負)

ある特定の条件に対して 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".

COBSQL

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』で説明されています。