Java Oracle日期转换错误ORA-01858

Java Oracle日期转换错误ORA-01858,java,sql,oracle,jdbc,Java,Sql,Oracle,Jdbc,我试图运行一个Oracle存储过程,并将结果作为数据源传递给JavaWeb应用程序中的报表。我使用的是SpringMVC,我的操作系统是Windows7-32位 代码如下所示: DataSource ds = jdbcTemplate.getDataSource(); Connection conn = ds.getConnection(); CallableStatement cs = conn.prepareCall(report.getStoredSQL()); ... preparin

我试图运行一个Oracle存储过程,并将结果作为数据源传递给JavaWeb应用程序中的报表。我使用的是SpringMVC,我的操作系统是Windows7-32位

代码如下所示:

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\U COT\U BLD\U报告”,第4913行

这是我的存储过程的第4913行:d_截止日期:='1-jan-2004'

是否可以为Oracle会话配置格式,使其不依赖于操作系统设置


提前感谢您的帮助。

不要依赖隐式数据类型转换。如果要声明日期,请使用日期。使用日期文字或通过显式转换

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

当然,后者假设会话配置为使用英语(否则三个字母的缩写将不同)。如果您正在构建的应用程序可能由具有非英语会话设置的个人访问,那么使用数字月通常更有意义

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