COBOL2002 ユーザーズガイド

[目次][用語][索引][前へ][次へ]

24.2.4 SQL文のエラー処理

<この項の構成>
(1) SQL文の実行の確認
(2) SQL文でエラーが発生した場合の対処方法
(3) SQLCODE変数
(4) SQL文実行時のエラーメッセージ出力抑止

(1) SQL文の実行の確認

SQL文が正常に実行されたかどうかを確認するには,次の二つの方法があります。

(2) SQL文でエラーが発生した場合の対処方法

エラーが発生した場合,SQL文の実行によって出力された実行時メッセージを参照して,対処してください。出力される実行時メッセージのうち,次の項目はODBCドライバ,またはデータソースから返される値です。

(3) SQLCODE変数

SQLCODE変数を定義しておき,その値を参照することで,制御系,および操作系のSQL文が正しく実行されたか確認できます。

SQLCODE変数の値とその意味を次に示します。

表24-2 SQLCODE変数の値と意味

SQLCODE変数の値 意味
0 正常に終了した。
100 該当行が存在しない。
100以外の正の数
(>0 and ≠100)
  1. SQLCODE変数の値が1で,警告メッセージが出力されていない場合
    外部10進項目にデータを設定中に整数部,または小数部のけたあふれが発生した。
  2. 1.以外の場合
    警告メッセージを出力した。
負の数(<0) 実行は失敗し,エラーメッセージを出力した。

次の環境変数を指定すると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(埋め込み例外宣言)文の動作は変わりません。