次の方法で共有


DB2 の静的 SQL のトラブルシューティング

このトピックでは、Microsoft ADO.NET Provider for DB2 (Data Provider) の静的 SQL for DB2 パッケージ機能を使用するときに発生する可能性がある一般的なエラーとコーディングミスについて説明します。

一般的なエラー

以下の表で、発生する可能性のある DB2 サーバーのエラーと、エラーを修正するために必要な処理を説明します。

SQLCODE アクション
SQLCODE -104 (無効なステートメント) - データを検証してデータベース スキーマに一致させます。

- コマンド要素がパッケージ スキーマと一致することを確認します。
SQLCODE -204 (オブジェクトが見つかりません) 修飾されたオブジェクト名 (4 部構成または別名) を確認します。
SQLCODE -440 (正しくないパラメーター) コマンド要素がパッケージ スキーマと一致することを確認します。
SQLCODE -501 (カーソルが開かれていません) コマンドに CALL STATIC が含まれていることを確認します。
SQLCODE -551 (特権が不十分) CREATE、BIND、および EXECUTE パッケージに対する特権が設定されていることを確認します。
SQLCODE -601 (オブジェクト名が一意ではない) 名前付け規則の一意性を確認します。

一般的なコーディングの間違い

次の表では、機能領域ごとの一般的なコーディングミスについて説明します。

領域 説明
XML ドキュメント - すべての入力パラメーターにはパラメーター要素が必要です。 各出力列には、列要素が必要です。

- カーソル名はパッケージ内で一意である必要があります。

- 要素が閉じていないか、一致しません。
DB2 for IBM i 分離レベル HIS 2010 では、サポートされる分離レベルはコミットなし (NC) です。これは XML ドキュメントで "IsolationLevel="NoCommit" として指定する必要があります。
ストアド プロシージャとエイリアスの重複 - パッケージ名、セクション番号、またはパッケージエイリアスが一意でない場合、パッケージの作成は失敗します。

- パッケージの作成が成功したが、エイリアス名がストアド プロシージャ名と同じ場合、実行時エラーが発生する可能性があります (たとえば、無効なパラメーターの場合は SQLCODE -440)。 または、DB2 サーバーから予期しない結果セットが返される場合があります。
エイリアス名なし - メタデータ ファイルにエイリアス名が含まれていない場合、Microsoft クライアントはストアド プロシージャとして ステートメントを実行します。

- 同じ名前のストアド プロシージャが存在する場合、ストアド プロシージャが実行され、プログラムで予期しない結果が発生する可能性があります。

- 同じ名前のストアド プロシージャがない場合、データベース サーバーはオブジェクト名が未定義であるというエラーを返します (SQLCODE -204)。