2016-11-30 69 views
0

我运行在WebSphere 7.0版本,这是新近在我的QA ENV安装应用程序时遇到以下Oracle错误Oracle错误:没有一个有效的一个月

SELECT MODIFIED_DATE 
FROM /*Query Builder Clause*/ abc 
WHERE abc_CID = '1189' 
    AND NVL(to_date('2010-3-17 11.30.10.0', 'MM-dd-yyyy hh24:mi:ss'), SYSDATE)=decode(MODIFIED_DATE,null,SYSDATE,MODIFIED_DATE) 

抛出异常

错误报告如下:

SQL Error: ORA-01843: not a valid month 01843. 00000 - "not a valid month"

只有使用websphere才会弹出此异常。此外,我不能修改代码,因为相同的代码在现场运行在websphere上。我试图做websphere user.timezone设置,我也尝试了默认的ojdbc6.jar到更高版本。同样的代码在jboss和weblogic中也能正常工作。请帮我解决这个问题。

+2

NVL(TO_DATE('03 -17-2010 11时30' 分10秒, 'MM-DD-YYYY HH24:MI:SS'),SYSDATE ) –

+0

这是服务器生成的日期格式和时间戳 –

+0

请参阅下面的答案(为了更好的格式化) –

回答

0

Oracle不会以毫秒为单位存储日期类型,这意味着您将不得不修剪最后一个标记。在这种情况下,你的表情是:

NVL(to_date('2010-3-17 11.30.00', 'yyyy-mm-dd hh24.mi.ss'),SYSDATE) 

您也可以转换成时间戳来代替:

NVL(to_timestamp('2010-3-17 11.30.00.0', 'yyyy-mm-dd hh24.mi.ss.ff1'),SYSDATE) 
+0

我无法更改代码,因为相同的代码在websphere生产环境和其他环境中表现良好服务器。我们在下面列出NVL(to_date('** 11-30-17 11.30.10.0 **','MM-dd-yyyy hh24:mi:ss')格式,这是websphere设置问题。 –

+0

应该更好'NVL(to_timestamp('2010-3-17 11.30.00.0','yyyy-mm-dd hh24.mi.ss.ff1'),SYSTIMESTAMP)' –

0

的问题是,'2010-3-17 11.30.10.0''MM-dd-yyyy hh24:mi:ss'不匹配。我假设其他正在工作的服务器位于使用MM-dd-yyyy格式的不同语言环境中。如果您不能对代码进行任何更改以重新格式化日期,则需要更改jvm语言环境以匹配其工作的位置(或使用MM-dd-yyyy的任何语言环境)。见下面的链接用于改变JVM区域设置:

how do I set the default locale for my JVM?

相关问题