このトピックでは、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)。 |