在tomcat服务器上部署应用程序时获得“非有效月份”异常

时间:2013-10-29 11:47:36

标签: tomcat plsql

我在Windows Server 2008 R2 Enterprise上的tomcat v7上运行了一个应用程序。在我的DAO类中,我正在运行一个SQL过程来获取要在前端显示的数据。

        stmtforcase.executeQuery("alter session set NLS_COMP=LINGUISTIC");
        stmtforcase.executeQuery("alter session set NLS_SORT=BINARY_CI");

        CallableStatement cs = connection
                .prepareCall("{ call STATUS_UPDATE(?,?,?,?,?,?) }");
        cs.setString(1, a);
        cs.setString(2, b);
        cs.setString(3, c);
        cs.setString(4, d);
        cs.setString(5, e);

        cs.registerOutParameter(6, OracleTypes.CURSOR);

        cs.execute();

程序代码

  BEGIN
  SELECT PREVIOUS_LOAD_DT INTO H FROM LOAD_DT_TBL; 
  OPEN AREF FOR SELECT DT,SUM(ACTUAL_B),SUM(PREDICTED_B) FROM STATUS_UPDATE_TBL
  WHERE (TO_DATE(DT,'DD-MON-YYYY') BETWEEN TO_DATE(SYSDATE-7,'DD-MON-YYYY') AND TO_DATE(H,'DD-MON-YYYY')) 
  AND (TM_NAME=TMNAME OR TMNAME='NULL') AND (PM_NAME=PMNAME OR PMNAME='NULL') AND (VERTICAL=VER OR VER='NULL') AND (ACCOUNT=ACC OR ACC='NULL') AND (PROJECT_NAME=PROJECTNAME OR PROJECTNAME='NULL')
  GROUP BY DT
  ORDER BY DT;
  END ;

PREVIOUS_LOAD_DT 是varchar列。从eclipse运行时,这完全正常。没有错误。但是当我将它导出到WAR并将其部署在Tomcat服务器上时,我得到了一个

  

java.sql.SQLException:ORA-01843:不是有效月份

我不明白为什么会发生这种情况,因为oracle数据库和过程是相同的。 另外,当我在Windows 7企业版中执行相同操作时,没有任何问题。部署的版本就像on on eclipse一样。

尝试使用11g和10g相同的表格和程序。 任何人都可以解释这种行为吗?

修改

使用 SYSDATE 代替 TO_DATE(SYSDATE-7,'DD-MON-YYYY')会产生同样的问题。但是像 TO_DATE('29 -OCT-2013','DD-MON-YYYY')这样的硬编码是有效的。我没有看到调用环境如何影响proc的工作,因为我没有将任何日期值传递为 IN 参数。所有基于日期的查询都来自proc。

注意:我使用varchar作为日期列,因为使用日期类型会在使用sql loader从csv加载日期时抛出错误。

0 个答案:

没有答案