[seasar-dotnet:887] Re: Oracle+ODP.NET 使用時のDaoのQuery属性について

Kazuya Sugimoto [E-MAIL ADDRESS DELETED]
2008年 7月 3日 (木) 16:44:50 JST


堀口さん
こんにちは。杉本です。

遅くなりまして申し訳ございません。

コミッタ間で検討中ですが、以下のような感じで指定すれば正常に動作するように
なる予定です。

> <Query("/*BEGIN*/WHERE /*IF dto.Code !=
> ''*/MTanto.Code>=/*dto.Code*//*END*/" & _
>    " /*IF dto.Kana != ''*/AND MTanto.Kana LIKE /*dto.KanaLike*//*END*/" & _
>    " /*IF dto.SectionCode != ''*/AND
> MTanto.BelongSectionCode=/*dto.SectionCode*//*END*//*END*/")> _

対応までは、現在の1=1の方法で対処していただけますでしょうか。


2008/06/28 0:23 Yuji Horiguchi <[E-MAIL ADDRESS DELETED]>:
> こんにちは、堀口です。
>
> 現在 Oracle を使用して開発を行っています。
> Dao の Query 属性について質問があります。
>
>
> MTanto というテーブルがあります。
>
> Dao に以下のようなメソッドを追加しました。
>
> <Query("/*IF dto.Code != ''*/MTanto.Code>=/*dto.Code*//*END*/" & _
>    " /*IF dto.Kana != ''*/AND MTanto.Kana LIKE /*dto.KanaLike*//*END*/" & _
>    " /*IF dto.SectionCode != ''*/AND
> MTanto.BelongSectionCode=/*dto.SectionCode*//*END*/")> _
> Function GetList(ByVal dto As GetListDto) As IList(Of MTanto)
>
> この dto の全ての条件を空にしてメソッドを呼び出すとSQLがエラー(ORA-
> 00936: 式がありません。)
> となってしまい、ログを確認すると、
>
> (※WHERE句のみ抜粋、適当に改行しています)
> WHERE
>  MTanto.BelongSectionCode=BelongSectionCodeRef.Code(+)
>  AND MTanto.WorkSectionCode=WorkSectionCodeRef.Code(+)
>  AND MTanto.AuthClassCode=AuthClassCodeRef.Code(+)
>  AND MTanto.UpdateTantoCode=UpdateTantoCodeRef.Code(+)
>  AND
>
> となっていました(最後に AND がついてしまっている)。
> MTanto の BelongSectionCode、WorkSectionCode 、AuthClassCode、
> UpdateTantoCode
> プロパティはRelno、Relkeys属性を指定して外部参照を行っています。
>
> また、全体を/*BEGIN*/〜/*END*/ を囲ってみましたが変わりませんでした。
>
> さらに、Query属性を、
>
> <Query("/*BEGIN*/WHERE /*IF dto.Code !=
> ''*/MTanto.Code>=/*dto.Code*//*END*/" & _
>    " /*IF dto.Kana != ''*/AND MTanto.Kana LIKE /*dto.KanaLike*//*END*/" & _
>    " /*IF dto.SectionCode != ''*/AND
> MTanto.BelongSectionCode=/*dto.SectionCode*//*END*//*END*/")> _
>
> としたところ、全て空のときは、
>
> WHERE 〜省略〜 AND MTanto.UpdateTantoCode=UpdateTantoCodeRef.Code(+)
>
> と正しく動作したのですが、例えば dto.Code を指定した場合、
>
> WHERE 〜省略〜 AND MTanto.UpdateTantoCode=UpdateTantoCodeRef.Code(+)
> WHERE MTanto.Code>='0000001'
>
> となってしまい、エラーとなってしまいました。
>
> 正しく動作するにはどのように記述すればよいのでしょうか?とりあえず、
>
> <Query("1=1 /*IF dto.Code != ''*/AND MTanto.Code>=/*dto.Code*//*END*/" & _
>    " /*IF dto.Kana != ''*/AND MTanto.Kana LIKE /*dto.KanaLike*//*END*/" & _
>    " /*IF dto.SectionCode != ''*/AND
> MTanto.BelongSectionCode=/*dto.SectionCode*//*END*/")> _
>
> としてしのいでします。
>
> 環境:
> Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
> Oracle Data Provider for .NET (ODP.NET) 11.1.0.6.0
> Seasar.NET 1.3.9.0
> VS2005(VB.NET)
>
> よろしくお願いします。
>
> --
> Yuji Horiguchi
> [E-MAIL ADDRESS DELETED]
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>



-- 
Kazuya Sugimoto
Microsoft MVP Development Platforms - XML
http://d.hatena.ne.jp/sugimotokazuya/


seasar-dotnet メーリングリストの案内