COBOL2002 ユーザーズガイド
(1) SQL文の実行の確認
SQL文が正常に実行されたかどうかを確認するには,次の二つの方法があります。
エラーが発生した場合,SQL文の実行によって出力された実行時メッセージを参照して,対処してください。出力される実行時メッセージのうち,次の項目はODBCドライバ,またはデータソースから返される値です。
- SQLSTATE
ODBCドライバから返される,ODBCインタフェースで規定された値です。詳細は,ODBCのプログラミングに関するマニュアルを参照してください。
- SQLエラーコード
データソースが固有に持つエラーコードです。詳細は,ODBCドライバ,またはDBMSのマニュアルなどを参照してください。
- ODBCメッセージ
ドライバマネージャ,またはデータソースから返されるメッセージです。
SQLCODE変数を定義しておき,その値を参照することで,制御系,および操作系のSQL文が正しく実行されたか確認できます。
SQLCODE変数の値とその意味を次に示します。
表24-2 SQLCODE変数の値と意味
SQLCODE変数の値 |
意味 |
0 |
正常に終了した。 |
100 |
該当行が存在しない。 |
100以外の正の数
(>0 and ≠100) |
- SQLCODE変数の値が1で,警告メッセージが出力されていない場合
外部10進項目にデータを設定中に整数部,または小数部のけたあふれが発生した。
- 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(埋め込み例外宣言)文の動作は変わりません。
All Rights Reserved. Copyright (C) 2013, 2016, Hitachi, Ltd.
All Rights Reserved. Copyright (C) 2002, 2011, Microsoft Corporation.