SQLCODE および SQLSTATE

SQL を使用するプログラム・インターフェースは、エラーが発生したとき、 エラー情報をアプリケーション・プログラムに戻します。 SQLSTATE とそれに対応する SQLCODE は、 SQL 通信域 (SQLCA) か SQL 診断域にあるアプリケーション・プログラムに戻されます。

SQLCA は、 アプリケーションによって提供されたスペースの制御ブロックにある変数の集まりであり、 これは、データベース管理システムによって、 最後に実行された SQL ステートメントに関する情報で更新されます。 SQL 診断域は、 データベース・マネージャーによって提供されたスペースにある、もっと複雑なストレージ域で、 最後に更新された SQL ステートメントに関するより広範な情報を通信するように設計されています。

SQL エラーが検出されると、 そのエラーの性質は、SQLSTATE と呼ばれる 5 文字のグローバル変数によって識別されます。また、SQLSTATE に加えて、整数 SQLCODE も使用できます。 ただし、SQLCODE は、現行の 4 種類の IBM® リレーショナル・データベース製品において、 同じエラー条件に対して同じ戻りコードを戻すわけではありません。 SQLSTATE は、アプリケーションが接続する DB2® 製品が何であるかに関係なく、 アプリケーション・プログラムが特定のエラー条件やエラーのクラスをテストできるように、設計されています。

ステートメントの処理時に SQL がハード・エラーを検出すると、 SQLCODE は負の数 (たとえば、SQLCODE -204) になります。 ステートメントの処理時に SQL が、例外ではあるが有効な条件 (警告) を検出すると、 SQLCODE は正の数 (たとえば、SQLCODE +100) になります。 ステートメントの処理時に SQL が何もエラーや例外条件を検出しないと、 SQLCODE は 0 になります。どの DB2 for i SQLCODE にも、対応するメッセージが、 ライブラリー QSYS のメッセージ・ファイル QSQLMSG 内にあります。たとえば、SQLCODE -204 は、メッセージ ID SQL0204 として記録されます。

戻されるエラー情報は貴重な問題診断ツールであるので、 戻された SQLCA や SQL 診断域に入っている特定の情報を表示するのに必要な指示を、 アプリケーション・プログラムに組み込んでおくとよいでしょう。 また、ここで扱うメッセージ・トークンも、問題診断に非常に有用です。

メッセージ記述表示 (DSPMSGD) コマンドを使って、 すべてのメッセージをオンラインで見ることができます。