从返回的 Oracle 时间戳列中检索数据
Posted
技术标签:
【中文标题】从返回的 Oracle 时间戳列中检索数据【英文标题】:Retrieving Data From Returned Oracle Timestamp Column 【发布时间】: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".
当我执行<cfoutput>
时,我得到了类定义。
在检索到的列中,我似乎得到的是一个对象而不是一个字符串。当我 cfdump 列时,我得到了 oracle.sql.TIMESTAMP 的对象。转储列出了可用的方法和字段。当我 cfoutput 相同的变量时,会显示一个字符串。当我尝试对变量执行DataFormat()
时,它抱怨它不是日期。
【问题讨论】:
你能发布exact错误吗(即:不要只描述它)。 如果你只是<cfoutput>#timestampfld#</cfoutput>
呢?
CF 错误是“值类 oracle.sql.timestamp 无法转换为日期”。我正在获取列值并将 DateFormat() 函数应用于它。当我执行 我只是在开发过程中偶然发现了这个错误。我过去有过,从那以后就忘记了。
我知道两种缓解方法:
第一个是根据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 的工作方式。
【讨论】:
以上是关于从返回的 Oracle 时间戳列中检索数据的主要内容,如果未能解决你的问题,请参考以下文章