[英]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.