1

私は次のような手順を持つアプリケーションを持っています:

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 は手順に記載されています。

4

1 に答える 1

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

SYSDATEすでに日付を返しているため、TO_DATE()変換がうまくいきません..

なぜエラーが発生するのかを理解するには..そうなると、うまくいかない可能性が高くTO_DATE(SYSDATE,'...')なります..TO_DATE('Date in Default Format','YOUR FORMAT');

あなたのデフォルトのフォーマットはNLS_DATE_FORMATあなたのセッションになります!これは、異なるホストのプラットフォームとセッション パラメータに依存します。

例:

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 ドキュメント リファレンス

于 2014-08-29T14:11:12.530 に答える