ホスト言語アプリケーションにおけるエラー条件と警告条件の検出と処理

各ホスト言語は、診断情報を処理するためのメカニズムを提供します。

  • C、COBOL、および PL/I では、実行可能 SQL ステートメントを含むアプリケーション・プログラムは、少なくとも次のいずれか 1 つを用意しなければなりません。
    • 名前が SQLCA の構造体。
    • 名前が SQLSTATE の独立型の CHAR(5) (C の場合は CHAR(6)) 変数。
    • 名前が SQLCODE の独立型の整変数。
    独立型の SQLSTATE または SQLCODE は、ホスト構造体中で宣言されていてはなりません。 独立型の SQLSTATE と 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

各 SQL ステートメント (GET DIAGNOSTICS または複合ステートメント以外) が実行された後、データベース・マネージャーは SQLCODE を設定します。SQLCODE は次のように設定されます。
  • SQLCODE = 0 で、しかも SQLWARN0 がブランクの場合、実行は正しく行われました。
  • SQLCODE = 100 の場合、データが見つかりませんでした。 例えば、カーソルが結果表の最後の行より後にあることが原因で、FETCH ステートメントがデータを戻さない場合など。
  • SQLCODE > 0 で、100 ではない場合、実行は警告付きで成功しました。
  • SQLCODE = 0 で、しかも SQLWARN0 = 'W' の場合、警告が出されましたが、実行は正常に行われました。
  • SQLCODE < 0 の場合、実行は失敗しました。

Db2® for i SQLCODE とそれに対応している SQLSTATE の全リストについては、「SQL メッセージおよびコード」トピック集 を参照してください。