この現象は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型と明示することができます。