DB2 10.5 for Linux, UNIX, and Windows

CLI 用の SQLSTATES

SQLSTATES は、5 文字 (バイト) の英数字ストリングで、 形式は ccsss です (cc はクラスで、sss はサブクラス)。
クラスが以下の SQLSTATE は、次のとおりになります。
  • '01' の場合、警告です。
  • 'HY' の場合、CLI または ODBC ドライバーによって生成されます。
  • 'IM' の場合、ODBC Driver Manager によって生成されます。
注: バージョン 5 より前のバージョンの CLI では、 'HY' ではなく 'S1' のクラスの SQLSTATE を返していました。 CLI ドライバーを指定するには 'S1' の SQLSTATE を返します。 そして、アプリケーションは環境属性 SQL_ATTR_ODBC_VERSION を値 SQL_OV_ODBC2 に設定する必要があります。

CLI の SQLSTATE には、データベース・サーバーによって返される追加の IBM 定義 SQLSTATE と、 ODBC バージョン 3 および ISO SQL/CLI 仕様では定義されていない条件に関する CLI 定義 SQLSTATE の両方が含まれています。 これによって、最大量の診断情報が戻されます。 また、ODBC 環境でアプリケーションを実行している場合、 ODBC 定義 SQLSTATE を受け取ることも可能です。

アプリケーション内で SQLSTATE を使用する場合、次のガイドラインに従ってください。
  • SQLGetDiagRec() を呼び出す前に関数戻りコードを必ずチェックして、診断情報を使用できるかどうかを判別してください。
  • ネイティブのエラー・コードよりも SQLSTATE を使用してください。
  • アプリケーションの移植性を高めるためには、 ODBC バージョン 3 および ISO SQL/CLI 仕様で定義されている CLI SQLSTATE のサブセットだけに依存性を持たせ、 追加情報は通知専用として戻すようにします。 アプリケーションでの依存性は、特定の SQLSTATE に基づいた論理フローの決定です。
    注: SQLSTATE のクラス (先頭 2 文字) に関する依存性を作成すると効果的な場合があります。
  • 診断情報を最大限活用するために、 SQLSTATE とともにテキスト・メッセージを返してください (該当すれば、 テキスト・メッセージには IBM 定義 SQLSTATE も含まれます)。 アプリケーションがエラーを返した関数の名前を印刷することも効果的です。
  • SQLSTATE に割り振られるストリングには、CLI によって戻されるヌル終了文字のためのスペースが必ず含められるようにしてください。
utilcli.c からのコード・セグメントには、 SQLSTATE などの診断情報を検索して表示する方法が示されています。
void HandleDiagnosticsPrint(SQLSMALLINT htype, /* handle type identifier */
                            SQLHANDLE hndl /* handle */ )
{
  SQLCHAR message[SQL_MAX_MESSAGE_LENGTH + 1];
  SQLCHAR sqlstate[SQL_SQLSTATE_SIZE + 1];
  SQLINTEGER sqlcode;
  SQLSMALLINT length, i;

  i = 1;

  /* get multiple field settings of diagnostic record */
  while (SQLGetDiagRec(htype,
                       hndl,
                       i,
                       sqlstate,
                       &sqlcode,
                       message,
                       SQL_MAX_MESSAGE_LENGTH + 1,
                       &length) == SQL_SUCCESS)
  {
    printf("¥n  SQLSTATE          =
    printf("  Native Error Code = 
    printf("
    i++;
  }

  printf("-------------------------¥n");
}

アプリケーションが DB2® を呼び出す方法 (生じる何らかのエラーも含めて) をより良く理解するには、 CLI/ODBC のトレース機能を使用することができます。