【问题标题】:Retrieving Data From Returned Oracle Timestamp Column从返回的 Oracle 时间戳列中检索数据
【发布时间】:2013-12-31 01:54:21
【问题描述】:

我们有一个使用 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>

产生错误,指出无法找到这些方法。如何获取该对象中保存的数据?

来自 cmets 的更新:

当我获取列值并将DateFormat( timestampfld, "dd.mm.yyyy" ) 函数应用于它时。 CF 错误是

"The value class oracle.sql.timestamp cannot be converted to a date".

当我执行&lt;cfoutput&gt; 时,我得到了类定义。

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

【问题讨论】:

  • 你能发布exact错误吗(即:不要只描述它)。
  • 如果你只是 &lt;cfoutput&gt;#timestampfld#&lt;/cfoutput&gt; 呢?
  • CF 错误是“值类 oracle.sql.timestamp 无法转换为日期”。我正在获取列值并将 DateFormat() 函数应用于它。当我执行 我得到类定义。
  • 更正。当我输出时间戳列值时,我得到一个包含时间/日期的字符串。
  • " 当我输出时间戳列值时,我得到一个包含所包含时间/日期的字符串" 那么......有什么问题?

标签: oracle11g coldfusion timestamp oracle10g coldfusion-8


【解决方案1】:

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

-Doracle.jdbc.J2EE13Compliant=true

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

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

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

【讨论】:

    猜你喜欢
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多