[seasar-dotnet:672] Re: Re_ ORACLEのDate型のWHERE句について

Ryo Miyagi [E-MAIL ADDRESS DELETED]
2007年 11月 26日 (月) 10:36:38 JST


清末さん

宮城です。

ミリ秒を切り捨てることでデータの取得ができた、とのことで
問題が解決されたようでよかったです。

ただ、S2Dao.NETのTimeStampProperty属性による排他制御を使用している場合、
今回と同じ問題が発生します。
これについては、今後対応していきたいと思います。

以上

07/11/25 に KIYOSUE Minoru<[E-MAIL ADDRESS DELETED]> さんは書きました:
> 宮城 様
>
> 清末です。
> この度の件、大変お手数をおかけし、恐縮人存じます。
>
> 確認いたしましたところ、 s2dao.dicon に、Inspector等諸々の定義をしており、
> そのため、まさに以下のご指摘どおりとなっておりました。
>
> > (2) <component class="Seasar.Extension.ADO.Impl.BasicCommandFactory" > ...
> >     の定義が複数のDICONファイルに記述されている。
>
>
> 早速確認いたしました所、宮城様のご指摘の通り、
>
> WHERE
>      TBCOL1  = 'XXXXXXXXX'  AND
>      TBCOL2  = '2007-11-25 03.22.11.000'
>
> とログに出力されており、ミリ秒が含まれていたためデータの取得ができて
> いない状態であったと思われます。
>
>
> お騒がせし、大変申し訳ございませんでした。
>
>
>
>
>
> ----- Original Message -----
> From: "Ryo Miyagi" <[E-MAIL ADDRESS DELETED]>
> To: <[E-MAIL ADDRESS DELETED]>
> Sent: Saturday, November 24, 2007 1:44 PM
> Subject: [seasar-dotnet:668] Re: Re_ ORACLEのDate型のWHERE句について
>
>
> > 清末さん
> >
> > 宮城です。
> >
> > 添付のado.diconで問題ないと思います。
> >
> > 日付文字列のフォーマットが有効にならない原因としては、下記が考えられます。
> >
> > (1) ado.diconをDaoインターフェースを定義したDICONファイルからIncludeしてい
> ない。
> > (2) <component class="Seasar.Extension.ADO.Impl.BasicCommandFactory" > ...
> >     の定義が複数のDICONファイルに記述されている。
> >
> > 確認をお願いします。
> >
> >
> > > 宮城 様
> > >
> > > お手数をおかけし大変恐縮に存じます。
> > >
> > > お言葉に甘えまして、添付の通りDICONファイルをご送付申し上げます。
> > >
> > > ご多忙中大変恐縮に存じますが、よろしくお願い申し上げます。
> > >
> > >
> > >
> > > ----- Original Message -----
> > > From: "Ryo Miyagi" <[E-MAIL ADDRESS DELETED]>
> > > To: <[E-MAIL ADDRESS DELETED]>
> > > Sent: Friday, November 23, 2007 2:37 PM
> > > Subject: [seasar-dotnet:666] Re: ORACLEのDate型のWHERE句について
> > >
> > >
> > > > 清末さん
> > > >
> > > > 宮城です。
> > > >
> > > > DICONファイルの記述は間違っていないと思います。
> > > > 修正したado.diconファイルを確認しますので添付してもらえませんか。
> > > >
> > > >
> > > > > ただし、上記ログ出力が行えないため、現状といたしましては、ミリ秒を切
> り捨
> > > てた
> > > > > のが成功した理由が否かの確認が取れてはいません。
> > > >
> > > > 私は使ったことがないのですが、
> > > > OracleのSQLトレース機能を使用すると
> > > > バインド変数の値を確認できるようです。
> > > > 詳細は、下記のURLを参照してください。
> > > > http://www.atmarkit.co.jp/fdb/rensai/orasql05/orasql05_2.html
> > > >
> > > >
> > > > > 宮城 様
> > > > >
> > > > > お世話になっております、清末です。
> > > > >
> > > > > ご送付下さいましたDICONを参照に以下の設定を「ado.dicon」に追加いたし
> まし
> > > > > た。
> > > > >
> > > > >   <!-- SQL Trace(ログ)の日付フォーマット -->
> > > > >   <component class="Seasar.Extension.ADO.Impl.BasicCommandFactory" >
> > > > >     <property name="SqlLogDateFormat">"yyyy/MM/dd"</property>
> > > > >     <property name="SqlLogDateTimeFormat">
> > > > > "yyyy/MM/dd HH:mm:ss.fff"
> > > > > </property>
> > > > >   </component>
> > > > >
> > > > > しかしながら、ログに出力された日付は、
> > > > >
> > > > > WHERE
> > > > >       TBCOL1  = 'XXXXXXXXX'  AND
> > > > >       TBCOL2  = '2007-11-21 14.59.54'
> > > > >
> > > > > と表示されております。
> > > > >
> > > > > なにか、誤りがございますでしょうか?
> > > > >
> > > > > また、取得につきましては、宮城様のお言葉をヒントに、DBエンティティに
> 値を
> > > 渡す
> > > > > 前にミリ秒を切り捨てる編集を加えましたところ取得できるようになりまし
> た。
> > > > >
> > > > > ただし、上記ログ出力が行えないため、現状といたしましては、ミリ秒を切
> り捨
> > > てた
> > > > > のが成功した理由が否かの確認が取れてはいません。
> > > > >
> > > > >
> > > > > ご多忙中、重ねてのお願いとなり大変恐縮に存じますが、よろしくお願い申
> し上
> > > げ
> > > > > ます。
> > > > >
> > > > >
> > > > > ----- Original Message -----
> > > > > From: "Ryo Miyagi" <[E-MAIL ADDRESS DELETED]>
> > > > > To: <[E-MAIL ADDRESS DELETED]>
> > > > > Sent: Monday, November 19, 2007 9:51 PM
> > > > > Subject: [seasar-dotnet:659] Re: ORACLEのDate型のWHERE句について
> > > > >
> > > > >
> > > > > > 清末さん
> > > > > >
> > > > > > 宮城です。
> > > > > >
> > > > > >> すみません、どのDICONファイルに追加すれば良いですか?
> > > > > >
> > > > > > BasicCommandFactoryの設定は、
> > > > > > DBの接続情報を記述しているDICONファイルに追加してください。
> > > > > > ファイル名は、Ado.diconもしくはDao.diconになっているかと思います。
> > > > > > 参考までにファイルを添付いたします。
> > > > > >
> > > > > >
> > > > > >> >> ODP.NETのデバッグ・トレース機能を使えば
> > > > > >> >> 発行したSQL文を確認できると思います。
> > > > > >> 確認いたしましたが、置換パラメータになっている以外は、ログと同じ
> SQLで
> > > した。
> > > > > >>
> > > > > >
> > > > > > すいません。
> > > > > > 置換パラメータに設定された値までは確認できないようです。
> > > > > >
> > > > > >
> > > > > >> 宮城 様
> > > > > >>
> > > > > >> お手数をお掛けし、大変恐縮に存じます。
> > > > > >>
> > > > > >> 金曜日から日曜日まで、私用で確認できる環境から離れていたため
> > > > > >> お返事が遅くなり、大変申し訳ございませんでした。
> > > > > >>
> > > > > >> さて、以下の確認点につきまして、早速実行いたしましたので、ご連絡
> > > > > >> 申し上げます。
> > > > > >>
> > > > > >> > S2.NETの日付文字列のフォーマットを変更して発行されたSQL文を確認
> > > > > >> > していただけないでしょうか。
> > > > > >> >
> > > > > >> > 日付文字列のフォーマットはDICONファイルを以下のように変更しま
> す。
> > > > > >> >  <component
> class="Seasar.Extension.ADO.Impl.BasicCommandFactory">
> > > > > >> >    <property name="SqlLogDateFormat">"yyyy/MM/dd"</property>
> > > > > >> >    <property name="SqlLogDateTimeFormat">"yyyy/MM/dd
> > > > > >> > HH:mm:ss.fff"</property>
> > > > > >> >  </component>
> > > > > >>
> > > > > >> すみません、どのDICONファイルに追加すれば良いですか?
> > > > > >> 一応、アプリケーションのDICONに追加し、実行しましたが、ログは
> > > > > >>
> > > > > >> WHERE
> > > > > >>       TBCOL1  = 'XXXXXXXXX'  AND
> > > > > >>       TBCOL2  = '2007-11-19 17.57.47'
> > > > > >>
> > > > > >> と表示されております。
> > > > > >>
> > > > > >>
> > > > > >> >> ODP.NETのデバッグ・トレース機能を使えば
> > > > > >> >> 発行したSQL文を確認できると思います。
> > > > > >>
> > > > > >> 確認いたしましたが、置換パラメータになっている以外は、ログと同じ
> SQLで
> > > した。
> > > > > >>
> > > > > >>
> > > > > >> WHERE
> > > > > >>       TBCOL1  = :0  AND
> > > > > >>       TBCOL2  = :1
> > > > > >>
> > > > > >>
> > > > > >>
> > > > > >> ----- Original Message -----
> > > > > >> From: "Ryo Miyagi" <[E-MAIL ADDRESS DELETED]>
> > > > > >> To: <[E-MAIL ADDRESS DELETED]>
> > > > > >> Sent: Saturday, November 17, 2007 11:07 PM
> > > > > >> Subject: [seasar-dotnet:654] Re:ORACLEのDate型のWHERE句について
> > > > > >>
> > > > > >>
> > > > > >> > 清末さん
> > > > > >> >
> > > > > >> > 宮城です。
> > > > > >> >
> > > > > >> > 私の環境では再現しませんでした(C#で確認しております)。
> > > > > >> > おそらく、S2Dao.NETが原因とは考えにくいです。
> > > > > >> >
> > > > > >> > ODP.NETのデバッグ・トレース機能だと
> > > > > >> > 発行したSQL文は確認できますがバインド変数の設定値まで確認できな
> かっ
> > > たので
> > > > > >> >
> > > > > >> > S2.NETの日付文字列のフォーマットを変更して発行されたSQL文を確認
> > > > > >> > していただけないでしょうか。
> > > > > >> >
> > > > > >> > 日付文字列のフォーマットはDICONファイルを以下のように変更しま
> す。
> > > > > >> >  <component
> class="Seasar.Extension.ADO.Impl.BasicCommandFactory">
> > > > > >> >    <property name="SqlLogDateFormat">"yyyy/MM/dd"</property>
> > > > > >> >    <property name="SqlLogDateTimeFormat">"yyyy/MM/dd
> > > > > >> > HH:mm:ss.fff"</property>
> > > > > >> >  </component>
> > > > > >> >
> > > > > >> > 確認点は、ミリ秒に設定された値です。
> > > > > >> > ミリ秒に0以外の値が設定されているとOracleのDATE型では
> > > > > >> > ミリ秒を切り捨てて格納しているため検索条件が一致しません。
> > > > > >> >
> > > > > >> > 以上
> > > > > >> >
> > > > > >> > 07/11/16 に Ryo Miyagi<[E-MAIL ADDRESS DELETED]> さんは書きました:
> > > > > >> >> 清末さん
> > > > > >> >>
> > > > > >> >> 宮城です。
> > > > > >> >>
> > > > > >> >> 頂いた情報を確認したところ、特におかしいところは無いと思いま
> す。
> > > > > >> >> 今、手元に検証環境が無いため、週末に自宅環境で再現するか調査し
> てみ
> > > ます。
> > > > > >> >>
> > > > > >> >>
> > > > > >> >> あと、Oracle側に実際に発行されているSQL文を確認していただくと
> > > > > >> >> S2Dao.NET側の問題なのかそうでないか切り分けやすいです。
> > > > > >> >>
> > > > > >> >> ODP.NETのデバッグ・トレース機能を使えば
> > > > > >> >> 発行したSQL文を確認できると思います。
> > > > > >> >> 使い方は、
> > >
> http://otndnld.oracle.co.jp/document/products/oracle10g/102/windows/B31247-01.zip
> > > > > >> >> に含まれるfeatDebug.htmを参照してください。
> > > > > >> >>
> > > > > >> >> 以上、宜しくお願いします
> > > > > >> >>
> > > > > >> >> 07/11/16 に KIYOSUE Minoru<[E-MAIL ADDRESS DELETED]> さんは書きまし
> た:
> > > > > >> >> > 宮城 様 ご回答ありがとうございます。
> > > > > >> >> >
> > > > > >> >> > ログ表示と発行しているSQLが異なる件、承知いたしました。
> > > > > >> >> >
> > > > > >> >> >
> > > > > >> >> > > 原因を考えてみますので
> > > > > >> >> > > お手数ですが、下記の情報を教えていただけないでしょうか。
> > > > > >> >> >
> > > > > >> >> > > ・Oracleのバージョン
> > > > > >> >> >
> > > > > >> >> > Oracle Database 10g Enterprise Edition Release 10.2.0.3
> > > > > >> >> >
> > > > > >> >> > > ・Oracle Data Provider for .NET のバージョン
> > > > > >> >> >
> > > > > >> >> > ODP.net 10.2.0.3
> > > > > >> >> >
> > > > > >> >> > > ・S2Dao.netのバージョン
> > > > > >> >> >
> > > > > >> >> > 1.3.2
> > > > > >> >> >
> > > > > >> >> > > ・OracleのDATE型カラムの定義
> > > > > >> >> > > (例: TBCOL2   DATE NULL)
> > > > > >> >> >
> > > > > >> >> > TBCOL2 DATE NOT NULL
> > > > > >> >> >
> > > > > >> >> > ちなみに。TBCOL1、TBCOL2ともPrimaryKey項目です
> > > > > >> >> >
> > > > > >> >> > > ・OracleのDATE型カラムに対する.NETのプロパティの定義
> > > > > >> >> > > (例:private System.DateTime tbcol2)
> > > > > >> >> >
> > > > > >> >> > dtmTbcol2  As Nullable(Of DateTime)
> > > > > >> >> >
> > > > > >> >> > 以上の様になっております。
> > > > > >> >> >
> > > > > >> >> >
> > > > > >> >> > よろしくお願いいたします。
> > > > > >> >> >
> > > > > >> >> >
> > > > > >> >> > ----- Original Message -----
> > > > > >> >> > From: "Ryo Miyagi" <[E-MAIL ADDRESS DELETED]>
> > > > > >> >> > To: <[E-MAIL ADDRESS DELETED]>
> > > > > >> >> > Sent: Friday, November 16, 2007 9:48 AM
> > > > > >> >> > Subject: [seasar-dotnet:651] Re:ORACLEのDate型のWHERE句につ
> いて
> > > > > >> >> >
> > > > > >> >> >
> > > > > >> >> > > 清末さん
> > > > > >> >> > >
> > > > > >> >> > > 宮城です。
> > > > > >> >> > >
> > > > > >> >> > > 表題の件ですが、
> > > > > >> >> > > ログに出力しているSQLと
> > > > > >> >> > > 実際にOracleに発行しているSQLは違います。
> > > > > >> >> > >
> > > > > >> >> > > ログに出力しているSQLは、ログ表示用に日付文字列をフォー
> マット
> > > しており、
> > > > > >> >> > >
> > > > > >> >> > > 日付文字列のフォーマットは、
> > > > > >> >> > > Seasar.Extenstion.ADO.Impl.BasicCommandFactoryクラスの
> > > > > >> >> > > SqlLogDateFormatプロパティ及びSqlLogDateTimeFormatプロパ
> ティで
> > > > > >> >> > > 変更することが可能です。
> > > > > >> >> > >
> > > > > >> >> > > Oracleに発行しているSQLは、
> > > > > >> >> > > バインド変数を使用してDate型カラムの値を設定しています。
> > > > > >> >> > >
> > > > > >> >> > > 従って、Date型カラムの値が一致すればデータの取得が可能です
> ので
> > > > > >> >> > > DBのカラムをTO_CHARする必要はありません。
> > > > > >> >> > > 別の要因で取得できていないかと思います。
> > > > > >> >> > >
> > > > > >> >> > > 原因を考えてみますので
> > > > > >> >> > > お手数ですが、下記の情報を教えていただけないでしょうか。
> > > > > >> >> > > ・Oracleのバージョン
> > > > > >> >> > > ・Oracle Data Provider for .NET のバージョン
> > > > > >> >> > > ・S2Dao.netのバージョン
> > > > > >> >> > > ・OracleのDATE型カラムの定義
> > > > > >> >> > > (例: TBCOL2   DATE NULL)
> > > > > >> >> > > ・OracleのDATE型カラムに対する.NETのプロパティの定義
> > > > > >> >> > > (例:private System.DateTime tbcol2)
> > > > > >> >> > >
> > > > > >> >> > > 以上、宜しくお願いします。
> > > > > >> >> > >
> > > > > >> >> > > 07/11/15 に KIYOSUE Minoru<[E-MAIL ADDRESS DELETED]> さんは書き
> まし
> > > た:
> > > > > >> >> > > > お世話になっております、清末です。
> > > > > >> >> > > >
> > > > > >> >> > > > S2を使用した開発が、定着しつつあり、自分としては大変嬉し
>> > > 思っている今日
> > > > > >> >> > で
> > > > > >> >> > > > す。
> > > > > >> >> > > >
> > > > > >> >> > > > さて、ORACLEを使用したプロジェクトでS2を使用する事とな
> り、現
> > > 在コーディン
> > > > > >> >> > > >
> > > > > >> >> > グを
> > > > > >> >> > > > 開始しておりますが、Oracle の Date型カラムがWHERE句に含
> まれ
> > > る自動生成SQL
> > > > > >> >> > > > で質問があります。
> > > > > >> >> > > >
> > > > > >> >> > > > ログを見ると
> > > > > >> >> > > >
> > > > > >> >> > > > SELECT
> > > > > >> >> > > >    ・・・・・・・・・・
> > > > > >> >> > > > FROM
> > > > > >> >> > > >    TABLEA
> > > > > >> >> > > > WHERE
> > > > > >> >> > > >    TBCOL1  = 'XXXXXXXXX'  AND
> > > > > >> >> > > >    TBCOL2  = '2007-11-15 12.17.20'
> > > > > >> >> > > >
> > > > > >> >> > > > (TBCOL2がDate型のカラムです)
> > > > > >> >> > > >
> > > > > >> >> > > > となっており、接続には、ODP.netを使用いたしております。
> > > > > >> >> > > >
> > > > > >> >> > > > 該当のRowが存在していますが、結果は、Nothingで戻ってきま
> す。
> > > > > >> >> > > >
> > > > > >> >> > > > Oracleの場合、SQL上リテラル文字側をTO_DATEするか、DBのカ
> ラム
> > > をTO_CHARす
> > > > > >> >> > る
> > > > > >> >> > > > 必要があるのではないかと思うのですが、S2Dao.net(または、
> > > ODP.netの仕様?)
> > > > > >> >> > では
> > > > > >> >> > > > 上記のSQLで取得可能なのでしょうか?
> > > > > >> >> > > >
> > > > > >> >> > > > ご多忙中大変恐縮ですが、よろしくお願い申し上げます。
> > > > > >> >> > > >
> > > > > >> >> > > > _______________________________________________
> > > > > >> >> > > > seasar-dotnet mailing list
> > > > > >> >> > > > [E-MAIL ADDRESS DELETED]
> > > > > >> >> > > > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> > > > > >> >> > > >
> > > > > >> >> > >
> > > > > >> >> > >
> > > > > >> >> > > --
> > > > > >> >> > > Ryo Miyagi
> > > > > >> >> > > _______________________________________________
> > > > > >> >> > > seasar-dotnet mailing list
> > > > > >> >> > > [E-MAIL ADDRESS DELETED]
> > > > > >> >> > > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> > > > > >> >> > >
> > > > > >> >> >
> > > > > >> >> > _______________________________________________
> > > > > >> >> > seasar-dotnet mailing list
> > > > > >> >> > [E-MAIL ADDRESS DELETED]
> > > > > >> >> > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> > > > > >> >> >
> > > > > >> >>
> > > > > >> >>
> > > > > >> >> --
> > > > > >> >> Ryo Miyagi
> > > > > >> >>
> > > > > >> > _______________________________________________
> > > > > >> > seasar-dotnet mailing list
> > > > > >> > [E-MAIL ADDRESS DELETED]
> > > > > >> > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> > > > > >> >
> > > > > >>
> > > > > >> _______________________________________________
> > > > > >> seasar-dotnet mailing list
> > > > > >> [E-MAIL ADDRESS DELETED]
> > > > > >> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > >
> > --------------------------------------------------------------------------
> > > ------
> > > > >
> > > > >
> > > > > > _______________________________________________
> > > > > > seasar-dotnet mailing list
> > > > > > [E-MAIL ADDRESS DELETED]
> > > > > > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> > > > > >
> > > > >
> > > > > _______________________________________________
> > > > > seasar-dotnet mailing list
> > > > > [E-MAIL ADDRESS DELETED]
> > > > > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> > > >
> > > >
> > > >
> > > >
> > > > _______________________________________________
> > > > seasar-dotnet mailing list
> > > > [E-MAIL ADDRESS DELETED]
> > > > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> > > >
> >
> >
> >
> >
> > --------------------------------------
> > New Design Yahoo! JAPAN  2008/01/01
> > http://pr.mail.yahoo.co.jp/newdesign/
> > _______________________________________________
> > seasar-dotnet mailing list
> > [E-MAIL ADDRESS DELETED]
> > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> >
>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


-- 
Ryo Miyagi


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