名前
WHENEVER -- SQL文により特定の分類の条件が発生する時に行う動作を指定します。
記述形式
WHENEVER { NOT FOUND | SQLERROR | SQLWARNING } action
説明
SQL実行の結果において特殊な状態(行がない、SQL警告またはSQLエラー)で呼び出される動作を定義します。
パラメータ
パラメータの説明については“D.7.1 コールバックの設定”を参照してください。
使用例
EXEC SQL WHENEVER NOT FOUND CONTINUE END-EXEC. EXEC SQL WHENEVER SQLWARNING SQLPRINT END-EXEC. EXEC SQL WHENEVER SQLWARNING DO "warn" END-EXEC. EXEC SQL WHENEVER SQLERROR sqlprint END-EXEC. EXEC SQL WHENEVER SQLERROR CALL "print2" END-EXEC. EXEC SQL WHENEVER SQLERROR DO handle_error USING "select" END-EXEC. EXEC SQL WHENEVER SQLERROR DO sqlnotice USING 0 1 END-EXEC. EXEC SQL WHENEVER SQLERROR DO "sqlprint" END-EXEC. EXEC SQL WHENEVER SQLERROR GOTO error_label END-EXEC. EXEC SQL WHENEVER SQLERROR STOP END-EXEC.
以下は、結果セットを通したループ処理を扱うためにWHENEVER NOT FOUND GOTOを使用する典型的なアプリケーションです。
EXEC SQL CONNECT TO testdb AS con1 END-EXEC. EXEC SQL ALLOCATE DESCRIPTOR d END-EXEC. EXEC SQL DECLARE cur CURSOR FOR SELECT current_database(), 'hoge', 256 END-EXEC. EXEC SQL OPEN cur END-EXEC. * when end of result set reached, break out of while loop EXEC SQL WHENEVER NOT FOUND GOTO NOTFOUND END-EXEC. PERFORM NO LIMIT EXEC SQL FETCH NEXT FROM cur INTO SQL DESCRIPTOR d END-EXEC ... END-PERFORM. NOTFOUND. EXEC SQL CLOSE cur END-EXEC. EXEC SQL COMMIT END-EXEC. EXEC SQL DEALLOCATE DESCRIPTOR d END-EXEC. EXEC SQL DISCONNECT ALL END-EXEC.
互換性
WHENEVERは標準SQLで規定されていますが、ほとんどの動作はPostgreSQLの拡張です。