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 のトレース機能を使用することができます。