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

KIYOSUE Minoru [E-MAIL ADDRESS DELETED]
2007年 11月 19日 (月) 18:07:38 JST


宮城 様

お手数をお掛けし、大変恐縮に存じます。

金曜日から日曜日まで、私用で確認できる環境から離れていたため
お返事が遅くなり、大変申し訳ございませんでした。

さて、以下の確認点につきまして、早速実行いたしましたので、ご連絡
申し上げます。

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