ホスト言語アプリケーションにおけるエラー条件と警告条件の検出と処理
各ホスト言語は、診断情報を処理するためのメカニズムを提供します。
- C、COBOL、および PL/I では、実行可能 SQL ステートメントを含むアプリケーション・プログラムは、少なくとも次のいずれか 1 つを用意しなければなりません。
- 名前が SQLCA の構造体。
- 名前が SQLSTATE の独立型の CHAR(5) (C の場合は CHAR(6)) 変数。
- 名前が SQLCODE の独立型の整変数。
INCLUDE SQLCA ステートメントの使用により、SQLCA を入手することができます。 SQLCA を用意する場合には、独立型の SQLSTATE または SQLCODE はいずれも用意することはできません。 SQLCA には、名前が SQLSTATE の文字ストリング変数、および名前が SQLCODE の整変数が含まれています。
SQL 2003 コア標準に準拠するには、独立型の SQLSTATE を使用する必要があります。
- Java™ では、エラー状態の場合、SQLSTATE を取得するには getSQLState メソッドを使用し、 SQLCODE を取得するには getErrorCode メソッドを使用できます。
- REXX および RPG では、SQLCA が自動的に用意されます。
SQLSTATE
各 SQL ステートメント (GET DIAGNOSTICS または複合ステートメント以外) が実行された後、データベース・マネージャーは SQLSTATE を設定します。したがって、アプリケーション・プログラムでは、SQLCODE の代わりに SQLSTATE をテストすることによって、SQL ステートメントの実行の成否を検査することができます。
SQLSTATE はアプリケーション・プログラムに、共通エラー条件を示す共通コードを戻します。 さらに、SQLSTATE は、アプリケーション・プログラムで特定のエラーまたはエラーのクラスをテストできるように設計されています。 この体系は、すべてのデータベース・マネージャーで同一であり、ISO/ANSI SQL 2003 コア標準に基づいています。 SQLSTATE クラス、ならびにそれぞれの SQLCODE に関連付けられている SQLSTATE の全リストについては、「SQL メッセージおよびコード」トピック集を参照してください。
SQLCODE
- SQLCODE = 0 で、しかも SQLWARN0 がブランクの場合、実行は正しく行われました。
- SQLCODE = 100 の場合、データが見つかりませんでした。 例えば、カーソルが結果表の最後の行より後にあることが原因で、FETCH ステートメントがデータを戻さない場合など。
- SQLCODE > 0 で、100 ではない場合、実行は警告付きで成功しました。
- SQLCODE = 0 で、しかも SQLWARN0 = 'W' の場合、警告が出されましたが、実行は正常に行われました。
- SQLCODE < 0 の場合、実行は失敗しました。
Db2® for i SQLCODE とそれに対応している SQLSTATE の全リストについては、「SQL メッセージおよびコード」トピック集 を参照してください。