簡體   English   中英

Oracle日期轉換錯誤ORA-01858

[英]Oracle date conversion error ORA-01858

我正在嘗試運行Oracle存儲過程,並將結果作為數據源傳遞給Java Web應用程序中的報表。 我正在使用spring MVC,我的操作系統是Windows 7- 32bit。

代碼是這樣的:

DataSource ds = jdbcTemplate.getDataSource();
Connection conn = ds.getConnection();
CallableStatement cs = conn.prepareCall(report.getStoredSQL());

... preparing the parameters...

cs.registerOutParameter(7, oracle.jdbc.OracleTypes.CURSOR);
cs.execute();
ResultSet resultSet = (ResultSet)cs.getObject( outputParamNumber );

rs = new CachedRowSetImpl();
rs.populate(resultSet);

然后將rs傳遞給我的報告。

當我進入“控制面板”->“區域和語言”->“格式”並將其設置為英語(美國)時,一切正常,但是如果將其設置為“英語(加拿大)”,則在執行此行時會遇到此異常:

rs.populate(resultSet);

這是例外:

[22/09/14 14:13:25:166 EDT] 00000076 SystemErr R java.sql.SQLDataException:ORA-01858:在期望數字的地方找到了非數字字符ORA-06512:在“ IBMS.PK_COT_BLD_REPORTS” ,第4913行

這是我的存儲過程的第4913行:d_CutOffDate Date:='2004年1月1日';

是否可以為Oracle會話配置格式,使其不依賴於操作系統設置?

感謝您的幫助。

不要依賴隱式數據類型轉換。 如果要聲明date ,請使用日期。 使用日期文字或通過顯式轉換

d_CutOffDate Date := date '2004-01-01';

要么

d_CutOffDate Date := to_date( '1-jan-2004', 'DD-MON-YYYY' );

當然,后者假定您的會話配置為使用英語(否則,三個字母的縮寫會有所不同)。 如果您要構建的應用程序可由具有非英語會話設置的個人訪問,則通常使用數字月份更為合理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM