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)。 |