OracleのDATE型の値を取得すると時分秒の値が"00:00:00"となってしまいます

この現象はOracleのJDBCドライバーの仕様がバージョンによって異なるために発生します。Oracleでは9i以降のバージョンで新たに「TIMESTAMP型」というデータ型が導入され、これに伴いJDBCドライバーでの従来のDATE型の扱いが変更されました。

具体的にはJDBCのDATE型を取得するAPIで、Oracle側でDATE型として定義されているカラムの情報を取得した場合、8i以前のJDBCドライバーではjava.sql.Types.TIMESTAMPが返されていたのに対し、9i,10gのJDBCドライバーではjava.sql.Types.DATEが返されるようになっています。さらに、11gのJDBCドライバーでは再びjava.sql.Types.TIMESTAMPが返されるようになりました。

RDBGetコンポーネントではカラム情報として返されるデータ型によって、値をDateとして取得するか、Timestampとして取得するかの動作が変わるため、9i,10gのJDBCドライバーを使用した場合、 OracleのDATE型のカラムの値がjava.sql.Dateとして取得されます。(時刻情報が欠落します。)

次のいずれかの方法で回避することができます。

  • Oracle側のカラム定義をTIMESTAMP型で行う
    新規で作成するテーブルではこの方法を推奨します。
  • Oracle 11g以降のバージョンのJDBCドライバーを使用する
    使用しているOracleが11g以降のJDBCドライバーに対応しているのであれば、11g以降のJDBCドライバーを使うことでDATE型をTimestampとして扱うことができます。
  • SQLCallコンポーネントでデータ型をTimestampと明示する
    RDBPutコンポーネントの代わりにSQLCallコンポーネントを使用した場合、SQLパラメータのデータ型をTIMESTAMP型と明示することができます。
この記事は役に立ちましたか?
1人中0人がこの記事が役に立ったと言っています

このセクションの記事

他のキーワードで検索する