戻る

目次

FAQ

パラメタライズド・クエリの初歩

方法

パラメタライズド・クエリのバインド変数へのバインド方法は?

名前バインドにのみ対応しています。このため、どのデータプロバイダであっても、順番バインドをサポートしません。

ストアド プロシジャ、無名PL/SQLブロックの実行や、戻り値の取得などは可能か?

ストアド プロシジャでも動的パラメタライズド・クエリ機能を使用できます。

デッドロック、ロックタイムアウト、「ユニークキーの重複」などの例外をリトライしたい。

B層ベースクラス2の例外処理をカスタマイズして、 左記のリトライ対象例外を業務例外に振り替え、P層に正常系の戻り値が戻るようにします。

SetUserParameter()メソッドの利用ポリシーをどのように考えるべきか?

SetUserParameter()メソッドは、SQLインジェクションの可能性があるものの、DB部品の(僅かな)制約 / 制限などを解決するAPIでもあります。このため、SetUserParameter()メソッドの利用を制限せず、D層のベースクラス2に実装するSQLトレースをカスタマイズしてSQLインジェクションの可能性があるSQLをチェック & Warningログを出力するなどの 対応をした方がプロジェクトとしては、スムーズに開発を遂行できると考えます。 [#oe0cc3be]

性能

コマンド タイムアウト値を設定するにはどうすれば良いか?

共通のコマンド タイムアウト値をconfigファイルに設定できます。

ODP.NET、HiRDBの配列バインドをサポートしているか?

サポートしています。また、配列バインドをサポートしていないデータプロバイダのために、バッチクエリ作成支援機能を提供しています。

SQLで暗黙の型変換が発生し、検索処理性能が大幅に劣化する。

SetParameter()メソッドに型、サイズ.etcを指定可能です。 後工程でのPG修正が難しい場合は、SQL定義ファイル中に型キャストを明示することでも対応可能です。

動的パラメタライズド・クエリを記述するXMLファイルのサイズなどにより性能が劣化しないか?

1つのXMLファイル中に150タグ以上あると性能が劣化が始まりますので、不要なタグは記述しないようにお願いします(XMLファイル サイズについては、問題ないようです)。 また、バッチ更新処理の場合は、ラウンド・トリップ軽減の観点も含め、配列バインド(ODP.NET、HiRDBでサポート)、バッチクエリ作成支援機能を併用下さい。なお、動的パラメタライズド・クエリ分析ツールを使用したテストのために記述する PARAMタグ、DIVタグなどXMLドキュメント オブジェクトの更新処理を伴わないタグについては、性能劣化の原因になりません。

エラー

検索条件のIN句(副問合せ)を動的化したいがエラーとなる。

検索条件のIN句(副問合せ)を動的化する場合、動的パラメタライズド・クエリのIFタグ ではなく、タグのネストが可能なSUBタグを使用頂けます。

動的パラメタライズド・クエリでXMLが編集されずに、そのまま実行される。

DB部品の最も初めのチェック処理にXmlDocument?.Load()メソッドを使用しているため、 XMLフォーマットとして正しいものは動的パラメタライズド・クエリ、不正であるものは静的パラメタライズド・クエリとして実行されるため、この現象は、不正なフォーマットのXMLを投げている事に起因します。XMLフォーマットの不正を確認するためには、動的パラメタライズド・クエリ分析ツールを使用するか、デバッグ時に、DB部品クラスのIsDPQプロパティ(動的SQLか静的SQLかを識別する)をチェックして下さい。

自動生成Daoの Update処理で「ORA-00972 "識別子が長すぎます"」が発生する。

D層自動生成ツールは、Update時に使用するパラメタ識別子にプレフィックス・サフィックスを1文字以上、追加する必要があります。この際、パラメタ識別子が30文字を越えてしまい、エラーが発生するケースがあります。プレフィックス・サフィックスは、D層自動生成ツールのコンフィグで設定可能です。この再設定と、再生成が面倒な場合は、文字列一括置換ツールなどを使ってパラメタ識別子を置換するなどして下さい(DaoとUpdate処理のSQL定義(XML)が置換対象ファイルになります)。

サポート

Like句を使用した曖昧検索をサポートしているか?

サポートしています。パラメタライズド・クエリ自体がLike句を使用した曖昧検索をサポートしているため 文字列連結やSetUserParameter()メソッドを使用する必要はありません。

LINQ to SQLやLINQ to Oracle、LINQ to Entities(ADO.NET Entity Framework)をサポートしているか?

サポートしませんが、利用制限はしていません。D層フレームワーク(静/動的パラメタライズド・クエリ機能、D層自動生成ツール)の使用を推奨しています。

任意のDLL(Assembly)からの埋込SQLのロードをサポートしているか?


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS