[Seasar-user:5095] Re: [S2Dao]SQL のスタックトレース取得について

MORISHITA Minoru [E-MAIL ADDRESS DELETED]
2006年 11月 14日 (火) 16:20:54 JST


ひがさん

詳細なご説明ありがとうございます。

> バインド変数がバインドされる前のSQLは、ほぼSQLファイルと同じものです。
> 
> コンソールに表示されているSQLを実行すると
> 結果が早く返ってくるのですが、S2Daoを通してSQLを実行すると
> 極端に遅い現象が発生するというのは、
> バインド変数によって実行プランが変わってしまうためです。
> 
> これに対応するためには、ヒントを使って特定のインデックスを
> 使うようにするか、埋め込み変数(/*$ ... */)を
> 使って変数を直接文字列としてSQLに埋め込んでください。
> 変数が文字列の場合は、''で囲むことも必要です。
> なお、埋め込み変数を使った場合には、SQLインジェクション対策を
> 自前でしてください。
> 実行プランに関係のなさそうな項目を1つぐらい選んで普通のバインド変数に
> すれば、SQLインジェクション対策は不要です。
> 
> よろしくお願いします。
> 

上記の対応で回避することに致します。

また、早速埋め込み変数を使用し、気づいた点がありましたので
ご報告させていただきます。

"?" が入ってしまうとArrayIndexOutOfBoundsExceptionのエラーになってしまい、
エスケープすることもできないのですが、"?"が検索条件として入ることは
想定されてないのでしょうか。

お手数ですが、よろしくお願い致します。



Seasar-user メーリングリストの案内