[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 メーリングリストの案内