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

Yuji Horiguchi [E-MAIL ADDRESS DELETED]
2008年 6月 28日 (土) 00:23:11 JST


こんにちは、堀口です。

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