从返回的Oracle时间戳列中检索数据

时间:2013-12-31 01:54:22

标签: oracle11g coldfusion timestamp oracle10g coldfusion-8

我们有一个使用Oracle时间戳的ColdFusion 8(Linux)应用程序。我们刚刚从10g转换为Oracle 11g,我们现在在数据源上使用Oracle的瘦客户端。我们在选择了时间戳列的应用程序中收到错误。

似乎正在返回类oracle.sql.TIMESTAMP的对象。我通过转储列的内容来验证这一点。果然,它让我分解了对象的方法及其返回类型。但是,我似乎无法直接与此对象接口:

<cfquery name="getstuff" ...>
    SELECT timestampfld ...
    FROM myTable
</cfquery>

getstuff.timestampfld包含一个对象。但是,这样做:

<cfoutput query="getstuff">
    #timestampfld.stringValue()#
    #timestampfld.dateValue()#
</cfoutput>

产生的错误表明无法找到这些方法。如何获取该对象中的数据?

从评论中更新:

当我获取列值并将DateFormat()函数应用于它时。 CF错误是“值类oracle.sql.timestamp无法转换为日期”。当我执行<cfoutput>时,我得到了类定义。

在检索到的列中,我似乎得到一个对象而不是一个字符串。当我cfdump列时,我得到oracle.sql.TIMESTAMP的OBJECT。转储列出了可用的方法和字段。当我cfout输出相同的变量时,会显示一个字符串。当我尝试对变量执行DataFormat()时,它会抱怨它不是日期。

1 个答案:

答案 0 :(得分:1)

我只是在开发过程中偶然发现了这个错误。我在过去有过,从那时起就被遗忘了。 我知道两种缓解方法: 第一个是根据关于不同上下文中相同错误消息的问题的 answer。 可以将以下内容添加到 jvm.config 文件

-Doracle.jdbc.J2EE13Compliant=true

第二个不是返回一个 Oracle TIMESTAMP 列而是 CAST 它做 DATE,首先,像

<cfquery name="getstuff" ...>
  SELECT CAST( timestampfld as DATE ) timestampfld
  FROM myTable
</cfquery>

老实说,我对两者都不满意。当忘记 JVM 参数时,软件会崩溃。另一方面,CAST 可能会影响 SQL 的工作方式。