[seasar-dotnet:259] Re: [S2Dao]SQLServerのバインド変数コメントでエラー
Kazuya Sugimoto
sugimotokazuya @ gmail.com
2006年 6月 29日 (木) 09:35:12 JST
杉本です。
申し訳ないです。よろしくお願いします。
06/06/29 に Ryo Miyagiさんは書きました:
> 宮城です。
>
> > 今週リリース予定の次バージョンでは、バインド変数コメントを重複して
> > 使用できるように対応したいと思います。
>
> 上記の修正が原因だと思うのですが、
> 重複したバインド変数コメントを含むSQLファイル
> (例:"select * from emp where empno = @empno or empno = @empno or ename = @ename")
> をOracle(ODP.NET Ver 10.2.0.100)に対して実行すると
>
> ORA-01008: バインドされていない変数があります。
>
> のエラーが発生します。
>
> また、ODBC経由でも同様のエラーが発生します。
>
> ※但し、テストケースにある
> select * from emp where empno = @empno or empno = @empno2 or empno = @empno
> のSQLだとODP.NETでは成功する。ODBCでは失敗する。
>
> 位置指定パラメータをサポートしているデータプロバイダのみで
> エラーになっていることから、
> 位置指定パラメータを指定する必要があるところに
> 名前付パラメータとしてパラメータをセットするように修正したことが原因だと思われます。
>
> そこで私のほうで次のように修正したいと考えています。
>
> (1) S2ADO.NETの内部処理では位置指定パラメータを使用する。
> 理由:S2ADO.NETの移植元であるS2JDBCが使用しているJDBCドライバは、
> 位置指定パラメータをサポートしているため、
> S2ADO.NETも内部の動きは同じ位置指定パラメータにしていたほうが
> 互換性をとりやすい。
>
> (2) データプロバイダに渡すパラメータ名はS2ADO.NET内部で生成する。
> 従って、パラメータ名の重複は無くなる。
> 例:
> ユーザがプログラムで指定するSQL文:
> SELECT * FROM EMP WHERE empno = @empno OR EMPNO = @empno2 OR empno = @empno
> S2ADO.NETがデータプロバイダ(SQL Server)に渡すSQL文:
> SELECT * FROM EMP WHERE empno = @1 OR EMPNO = @2 OR empno = @3
> S2ADO.NETがデータプロバイダ(ODP.NET)に渡すSQL文:
> SELECT * FROM EMP WHERE empno = :1 OR EMPNO = :2 OR empno = :3
> S2ADO.NETがデータプロバイダ(ODBC)に渡すSQL文:
> SELECT * FROM EMP WHERE empno = ? OR EMPNO = ? OR empno = ?
>
> (3) (2)の修正に伴い、次のメソッドを廃止(obsole)する。
> メソッドの呼び出し元からパラメータ名(argNames)を指定しても使用しないので引数に必要ない。
> パラメータのデータ型(argTypes)もパラメータ(args)から推測できるので必要ない?。
> Seasar.Extension.ADO.Impl.BasicSelectHandler.Execute(
> object[] args, Type[] argTypes, string[] argNames)
> →今後は、Seasar.Extension.ADO.Impl.BasicSelectHandler.Execute(object[] args)を使用。
> Seasar.Extension.ADO.Impl.BasicUpdateHandler.Execute(
> object[] args, Type[] argTypes, string[] argNames)
> →今後は、Seasar.Extension.ADO.Impl.BasicUpdateHandler.Execute(object[] args)を使用。
>
> 以上、特に問題が無いようでしたら週末に修正したいと考えています。
>
>
> --------------------------------------
> Let's start Yahoo! Auction - Free Campaign Now!
> http://pr.mail.yahoo.co.jp/auction/
> _______________________________________________
> seasar-dotnet mailing list
> seasar-dotnet @ ml.seasar.org
> https://www.seasar.org/mailman/listinfo/seasar-dotnet
>
--
Kazuya Sugimoto
http://d.hatena.ne.jp/sugimotokazuya/
seasar-dotnet メーリングリストの案内