Symfoware Parallel Server RDBユーザーズガイド 応用プログラム開発編 |
目次
索引
![]() ![]() |
第2章 データベースを処理する応用プログラムの開発の概要 | > 2.2 SQL埋込みCOBOLプログラムの作成方法 |
応用プログラムはSQL文を実行したあと、実行結果を確認して処理を進めて行くことが必要です。このSQL文の実行結果を確認する方法には、以下の2とおりがあります。
状態変数の内容をチェックします。状態変数の変数名は“SQLSTATE”です。
埋込み例外宣言(WHENEVER文)によって、SQL文の処理にエラーがあった場合、または、検索データが見つからなかった場合の処理を指定しておきます。
a)の方法は、SQLSTATEに通知される実行結果を判定しながら処理を進める方法です。各SQL文の実行ごとに、実行結果をSQLSTATEに通知します。SQLSTATEに通知される値とその意味は、“SQLSTATE値”に示します。
b)の方法は、あらかじめある条件(エラーまたは検索データが見つからない)とその条件が発生したときの処理を指定しておく方法です。これによって、SQL文の実行ごとにチェックしなくても済みます。本項では、WHENEVER文の指定方法を説明します。
埋込み例外宣言は、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とおりの指定ができます。
例外動作は、以下の2とおりの指定ができます。
例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文を使用した応用プログラムの例に、WHENEVER文の有効範囲の例を示します。
IDENTIFICATION DIVISION. … PROCEDURE DIVISION. EXEC SQL DECLARE CU1 CURSOR FOR SELECT 製品名,在庫数量 FROM S1.在庫表 WHERE 製品番号 = :PNO END-EXEC. EXEC SQL DECLARE CU2 CURSOR FOR SELECT 発注数量 FROM S1.発注表 WHERE 取引製品=:PNO END-EXEC. EXEC SQL WHENEVER SQLERROR GOTO :P-ERROR END-EXEC. (1) * EXEC SQL OPEN CU1 END-EXEC. | EXEC SQL WHENEVER NOT FOUND GOTO :P-NEXT END-EXEC. (2) | MOVE 0 TO TOTAL. * | P-LOOP1. | | EXEC SQL FETCH CU1 INTO :PRODUCT, :QOH END-EXEC. | | COMPUTE TOTAL = TOTAL + QOH. | | GO TO P-LOOP1. *(2)の有 | P-NEXT. |効範囲 | EXEC SQL CLOSE CU1 END-EXEC. | | DISPLAY PRODUCT NC"在庫数量=" TOTAL. | | | | EXEC SQL OPEN CU2 END-EXEC. * | EXEC SQL WHENEVER NOT FOUND GOTO :P-END END-EXEC. (3) *(1)の有 MOVE 0 TO TOTAL. * |効範囲 P-LOOP2. | | EXEC SQL FETCH CU2 INTO :QOO END-EXEC. | | COMPUTE TOTAL = TOTAL + QOO. | | GO TO P-LOOP2. | | P-END. | | EXEC SQL CLOSE CU2 END-EXEC. *(3)の有 | DISPLAY PRODUCT NC"発注数量=" TOTAL. |効範囲 | STOP RUN. | | | | P-ERROR. | | DISPLAY "SQLERROR SQLSTATE=" SQLSTATE. | | DISPLAY "SQLMSG=" SQLMSG. | | STOP RUN. * * |
(1) SQL文の実行でNOT FOUND以外のエラーが生じた場合にP-ERRORへ進み、エラー情報を出力しプログラムは終了します。
(2) カーソル“CU1”の操作でNOT FOUND(検索データが見つからない)が生じた場合にP-NEXTへ進みカーソル“CU1”のクローズと在庫数量の出力を行います。
(3) カーソル“CU2”の操作でNOT FOUND(検索データが見つからない)が生じた場合にP-ENDへ進みカーソル“CU2”のクローズと発注数量の出力を行い、プログラムは終了します。
目次
索引
![]() ![]() |