23.2.4 SQL文のエラー処理
(1) SQL文の実行の確認
SQL文が正常に実行されたかどうかを確認するには,次の二つの方法があります。
-
埋め込み例外宣言を記述する
埋め込み例外宣言については,「23.1.1 埋め込みSQL文を使ったCOBOLプログラムの作成」の「(3) 埋め込み例外宣言」を参照してください。
-
SQLCODE変数については,「(3) SQLCODE変数」を参照してください。
(2) SQL文でエラーが発生した場合の対処方法
エラーが発生した場合,SQL文の実行によって出力された実行時メッセージを参照して,対処してください。出力される実行時メッセージのうち,次の項目はODBCドライバ,またはデータソースから返される値です。
(3) SQLCODE変数
SQLCODE変数を定義しておき,その値を参照することで,制御系,および操作系のSQL文が正しく実行されたか確認できます。
SQLCODE変数の値とその意味を次に示します。
次の環境変数を指定するとSQLCODE変数に設定される値が変更されます。
(a) 実行時環境変数CBLSQLROWCOUNT
- 形式
CBLSQLROWCOUNT=YES
- 規則
-
-
この環境変数にYESを指定した場合,埋め込みSQL文のDELETE文,INSERT文,またはUPDATE文を実行して,影響を受けた行数が0行の場合にSQLCODE変数に100が設定されます。
-
WHENEVER(埋め込み例外宣言)文のNOT FOUND指定の有効範囲内で実行される埋め込みSQL文(DELETE文,INSERT文,またはUPDATE文)に対して,SQLCODE変数に100が設定されることで,NOT FOUND条件が実行されます。
-
この環境変数を指定しなかったとき,またはYES以外の値を指定したときは,埋め込みSQL文のDELETE文,またはUPDATE文の実行で,削除/更新行が0行の場合,SQLCODE変数に0が設定されます。ただし,INSERT文に関しては,注意事項を参照してください。
-
この環境変数を指定した場合,影響を受けた行数を取得するために,ODBCドライバがサポートするSQLRowCount関数が内部的に発行されるようになります。
-
- 注意事項
-
問い合わせ指定を記述したINSERT文の実行時,問い合わせ指定によって導出される表が空の場合(挿入行数が0行)は,この環境変数の指定がない場合でもSQLCODE変数に100が設定されます。
(4) SQL文実行時のエラーメッセージ出力抑止
埋め込みSQL文実行時に出力される実行時メッセージの出力を抑止したい場合は,次の環境変数を指定します。
次の環境変数を指定すると埋め込みSQL文実行時に実行時メッセージが出力されなくなるので,CBLSQLERRORサービスルーチンを使用して,エラー情報はすべて取得することを推奨します。
(a) 実行時環境変数CBLSQLWMSG
- 形式
CBLSQLWMSG=YES
- 規則
-
-
設定値が形式に従ってない場合,この環境変数の指定は無効となります。
-
埋め込みSQL文実行時に出力される警告メッセージの出力を抑止したいときにYESを指定します。
-
この環境変数を指定しても,SQLCODE値,およびWHENEVER(埋め込み例外宣言)文の動作は変わりません。
-
(b) 実行時環境変数CBLSQLSUPPRESSMSG
- 形式
CBLSQLSUPPRESSMSG=8002
- 規則
-
-
設定値が形式に従ってない場合,この環境変数の指定は無効となります。設定値には,8002だけを指定できます。
-
ODBCインタフェースを使ってデータベースにアクセスする場合,KCCC8002R-Sメッセージの出力を抑止したいときに8002を指定します。
-
この環境変数を指定しても,SQLCODE値,およびWHENEVER(埋め込み例外宣言)文の動作は変わりません。
-