SQLError - エラー情報の検索

SQLError() は、特定のステートメント、接続、環境ハンドルに対して Db2 for i CLI 関数が最近呼び出された際の診断情報を返します。

この情報は、標準化された SQLSTATE、エラー・コード、およびテキスト・メッセージで構成されています。 詳細については、 Db2 for i CLIアプリケーションの診断を参照してください。

別の関数呼び出しからの SQL_ERROR または SQL_SUCCESS_WITH_INFO の戻りコードを受け取った後、 SQLError() を呼び出してください。

対応する Unicode (UTF-16) 関数: この関数は Unicode (UTF-16) 文字セットでも使用できます。 対応する Unicode 関数は SQLErrorW( です。) DB2® CLI の Unicode サポートの詳細については、 Db2 for i CLI の Unicode を参照してください。

構文

SQLRETURN SQLError (SQLHENV       henv,
                    SQLHDBC       hdbc,
                    SQLHSTMT      hstmt,
                    SQLCHAR       *szSqlState,
                    SQLINTEGER    *pfNativeError,
                    SQLCHAR       *szErrorMsg,
                    SQLSMALLINT   cbErrorMsgMax,
                    SQLSMALLINT   *pcbErrorMsg);

関数引数

表 1. SQLError の引数
データ・タイプ 引数 Use 説明
SQLHENV ハイフン (henv) 入力 環境ハンドル。 環境に関連する診断情報を表示するには、 有効な環境ハンドルを渡します。 hdbc を SQL_NULL_HDBC に設定します。 hstmt を SQL_NULL_HSTMT に設定します。
SQLHDBC hdbc 入力 データベース接続ハンドル。 接続に関連する診断情報を表示するには、 有効なデータベース接続ハンドルを渡し、 hstmt を SQL_NULL_HSTMT に設定してください。 henv 引数は無視されます。
SQLHSTMT hstmt (hstmt) 入力 ステートメント・ハンドル。 ステートメントに関連する診断情報を表示するには、 有効なステートメント・ハンドルを渡してください。 henv および hdbc 引数は無視されます。
SQLCHAR * szSqlState 出力 NULL 文字で切り捨てられた 5 文字のストリングで構成される SQLSTATE。 先頭の 2 文字はエラー・クラスを、それに続く 3 文字はサブクラスを表します。 これらの値は、X/Open SQL CAE 仕様および ODBC 仕様で定義されている SQLSTATE 値に直接対応し、 IBM® 固有の SQLSTATE 値および製品固有の SQLSTATE 値で拡張されています。
SQLINTEGER * pfNativeError 出力 固有のエラー・コード。 Db2 for i CLIでは、pfNativeError 引数には、データベース管理システム (DBMS) が返すSQLCODE値が含まれます。 エラーが DBMS ではなく Db2 for i CLI によって生成された場合、このフィールドは -99999 に設定されます。
SQLCHAR * szErrorMsg 出力 実装定義のメッセージ・テキストを保管するバッファーへのポインター。 Db2 for i CLI では、DBMS 生成メッセージのみが返されます。 Db2 for i CLI 自体は、問題を説明するメッセージ・テキストを返しません。
SQLSMALLINT cbErrorMsgMax 入力 バッファー szErrorMsg の最大 (割り振りの) 長。 割り振る長さの推奨値は、SQL_MAX_MESSAGE_LENGTH + 1 です。
SQLSMALLINT * pcbErrorMsg 出力 szErrorMsg バッファーに戻せる合計バイト数を指すポインター。

使用法

SQLSTATE は、X/OPEN SQL CAE および X/Open SQL CLI スナップショットによって定義され、 IBM 固有の SQLSTATE 値および製品固有の SQLSTATE 値で拡張されたものです。

  • 環境に関連する診断情報を表示するには、 有効な環境ハンドルを渡します。 hdbc を SQL_NULL_HDBC に設定します。 hstmt を SQL_NULL_HSTMT に設定します。
  • 接続に関連する診断情報を表示するには、 有効なデータベース接続ハンドルを渡し、 hstmt を SQL_NULL_HSTMT に設定してください。 henv 引数は無視されます。
  • ステートメントに関連する診断情報を表示するには、 有効なステートメント・ハンドルを渡してください。 henv および hdbc 引数は無視されます。

SQLError() 以外の関数が同じハンドルを使用して呼び出される前に、1 つの Db2 for i CLI 関数によって生成された診断情報が取得されない場合、前の関数呼び出しの情報は失われます。 これは、2 番目の Db2 for i CLI 関数呼び出しに対して診断情報が生成されるかどうかに関係なく当てはまります。

第 1 レベルのエラー・メッセージが切り捨てられないようにするには、SQL_MAX_MESSAGE_LENGTH + 1 のバッファー長を宣言します。 2 番目のレベルのエラー・メッセージが切り捨てられないようにするには、バッファーのサイズを SQL_MAX_MESSAGE_LENGTH より大きい値に設定してください。

戻りコード

  • SQL_ERROR
  • SQL_INVALID_HANDLE
  • SQL_NO_DATA_FOUND
  • SQL_SUCCESS

診断

SQLError() がそれ自体の診断情報を生成することはないので、 SQLSTATE は定義されません。 引数 szSqlStatepfNativeErrorszErrorMsg、または pcbErrorMsg が NULL ポインターの場合、SQL_ERROR が戻されます。

注: コード例を使用すると、 コード・ライセンスおよび特記事項の条件に同意したことになります。
/*************************************************************************
** file = typical.c
************************************************************************/
int print_error (SQLHENV    henv,
                    SQLHDBC    hdbc,
                    SQLHSTMT   hstmt)
{
SQLCHAR     buffer[SQL_MAX_MESSAGE_LENGTH + 1];
SQLCHAR     sqlstate[SQL_SQLSTATE_SIZE + 1];
SQLINTEGER  sqlcode;
SQLSMALLINT length;
 
 
    while ( SQLError(henv, hdbc, hstmt, sqlstate, &sqlcode, buffer,
                     SQL_MAX_MESSAGE_LENGTH + 1, &length) == SQL_SUCCESS )
    {
        printf("\n **** ERROR *****\n");
        printf("         SQLSTATE: %s\n", sqlstate);
        printf("Native Error Code: %ld\n", sqlcode);
        printf("%s \n", buffer);
    };
    return (0);
 
}