ページの先頭行へ戻る
Symfoware Server V10.0.0/V10.0.1 アプリケーション開発ガイド(埋込みSQL編)

3.2.4 SQL文の処理結果の確認

アプリケーションはSQL文を実行したあと、実行結果を確認して処理を進めて行くことが必要です。このSQL文の実行結果を確認する方法には、以下の2通りがあります。

  1. 状態変数およびメッセージ変数を使用する場合

  2. 埋込み例外宣言(WHENEVER文)を使用する場合

状態変数およびメッセージ変数を使用する場合

SQL文の実行結果は、各SQL文の実行ごとに、状態変数SQLSTATEおよびメッセージ変数SQLMSGに通知されます。アプリケーションでは、その値を判定しながら処理を進めます。

SQLSTATEおよびSQLMSGは、あらかじめ埋込みSQL宣言節で宣言しておく必要があります。宣言の詳細は、“状態変数の宣言”および“メッセージ変数の宣言”を参照してください。

SQLSTATEおよびSQLMSGを使用したSQL文の実行結果の確認方法は、“B.4 状態変数およびメッセージ変数の使用例”を参照してください。

参照

SQLSTATEに通知される値とその意味は、“アプリケーション開発ガイド(共通編)”を参照してください。また、SQLMSGに通知される内容は、“メッセージ集”を参照してください。

埋込み例外宣言(WHENEVER)を使用する場合

埋込み例外宣言は、SQL文が例外条件を生じた場合に実行する処理を指定するSQL文です。これにより、SQL文の実行ごとに、実行結果をチェックする必要がなくなります。埋込み例外宣言の指定例を以下に示します。

1

データなし以外のエラーが発生した場合には、ERR001へ進むことを指定します。

EXEC SQL  WHENEVER   SQLERROR   GOTO :ERR001  END-EXEC. 
                       (1)         (2)

(1) 条件

(2) 例外動作


2

検索の結果データが見つからない場合に、処理をそのまま続行することを指定します。

EXEC SQL  WHENEVER  NOT  FOUND   CONTINUE  END-EXEC. 
                       (1)         (2)

(1) 条件

(2) 例外動作

条件は、以下の2通りの指定ができます。

NOT FOUND:

検索データが見つからない場合に指定の例外動作を行います。

SQLERROR:

“検索データが見つからない”以外のエラーが発生した場合に指定の例外動作を行います。

例外動作は、以下の2通りの指定ができます。

CONTINUE:

次のステートメントに進みます。

GOTO <行き先>:

行き先で指定のステートメントに進みます。ここで、<行き先>は、制御を移す先の節名(セクション名)または段落名(パラグラフ名)の前にコロン“:”を付けて指定します。


3

SQL埋込みCOBOLプログラムで、SQL文にエラーが発生した場合には、P-ERRORへ進み、変数RCODEに8を設定することを指定します。

EXEC SQL  WHENEVER SQLERROR  GOTO  :P-ERROR  END-EXEC.
      :
P-ERROR.
    MOVE 8 TO RCODE.

WHENEVER文は複数個宣言することができます。条件の同じWHENEVER文を指定した場合、アプリケーション中での記述順序であとの宣言が有効になります。実行の順序とは関係ありません。

WHENEVER文の有効範囲の例を以下に示します。

図3.6 WHENEVER文を使用したアプリケーションの例

(1) 状態変数“SQLSTATE”およびメッセージ変数“SQLMSG”を宣言します。

(2) SQL文の実行でNOT FOUND以外のエラーが生じた場合にP-ERRORへ進み、エラー情報を出力し、プログラムは終了します。

(3) カーソル“CU1”の操作でNOT FOUND(検索データが見つからない)が生じた場合にP-NEXTへ進み、カーソル“CU1”のクローズと在庫数量の出力を行います。

(4) カーソル“CU2”の操作でNOT FOUND(検索データが見つからない)が生じた場合にP-ENDへ進み、カーソル“CU2”のクローズと発注数量の出力を行い、プログラムは終了します。