java.sql.SQLException : ORA-01843: not a valid month when calling a procedure

标签 java spring oracle hibernate sysdate

我有一个应用程序,其程序如下:

procedure get_full_data (list OUT sys_refcursor,id in number, 
                                   code in varchar2,type in varchar2) is
      year_in number;                                
begin
    year_in := to_number(to_char(to_date(sysdate,'DD-MON-RRRR'),'RRRR')); // line 628
        open list for
        select * from my_tab 
        where code_present = code AND to_number(substr(year,1,4)) in (year_in,year_in-1,year_in-2)
        and minth in(select max(month) from my_tab where code_present = code
                         and to_number(substr(year,1,4)) in (year_in,year_in-1,year_in-2)
                         group by substr(year,1,9))
        order by to_number(substr(year,1,4)) desc;
END get_full_data;

这是调用此过程的 Java 代码(我在这里使用 hibernate):

List<MyBean> salesApproval=session.getNamedQuery("get_data").setInteger("id",my_id).setString("code",my_code).setString("type",my_type).list();

MyBean 是保存过程返回的数据的类。

问题:
当我在 windows 系统上托管我的应用程序时,它可以正常工作并获得所需的结果。
但是,当我在 Linux Ubuntu 12.04 上托管我的应用程序时,会出现以下错误:

java.sql.SQLException: ORA-01843: not a valid month
ORA-06512: at "db.proc_pack", line 628

程序中提到了第 628 行。

最佳答案

year_in := to_number(to_char(sysdate,'RRRR')); // line 628

SYSDATE 已经返回日期,因此 TO_DATE() 转换出错..

要了解错误的原因.. TO_DATE(SYSDATE,'...') 将变为 TO_DATE('Date in Default Format','YOUR FORMAT'); 因此,出错的可能性更大..

您的 session 的默认格式将为 NLS_DATE_FORMAT!这取决于不同主机的平台和 session 参数!

示例:

SQL> SELECT value FROM   nls_database_parameters WHERE  parameter = 'NLS_DATE_FORMAT';

VALUE
--------------------------------------------------------------------------------
DD-MON-RR

SQL>  select to_date(sysdate,'MON-DD-RR') from dual;
 select to_date(sysdate,'MON-DD-RR') from dual
                *
ERROR at line 1:
ORA-01843: not a valid month

SQL> ALTER SESSION SET nls_date_format = 'MON-DD-RR';

Session altered.

SQL> select to_date(sysdate,'MON-DD-RR') from dual;

TO_DATE(S
---------
AUG-29-14

Oracle Document Reference

关于java.sql.SQLException : ORA-01843: not a valid month when calling a procedure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25569607/

相关文章:

Java邮件错误: SMTPAddressFailedException: 450 too many connections from your IP (rate controlled)

java - 从 spring mvc 应用程序并行更新 oracle 表

java - 如何将 LocalContainerEntityManagerFactoryBean 设置为 JpaTransactionManager?

sql - 优化 Oracle SQL 查询

c# - 将 'numerical' 排序应用于具有多个小数点/句点的奇数数据结构

java - 如何删除 'Assignment of Parameter ' 变量'不允许'

java - Blackberry:更改 KeywordFilterField 的排序

Java:JApplet,如何将它嵌入网页?

sql - 替换Where子句中的concat操作

java - 检查组合框是否为空值时出现错误