Sql 隐式数据类型不再在oracle 11g中工作
我们注意到,自从我们将tomcat从7.0.28升级到7.0.40后,oracle sql中的隐式数据类型已经不再像以前那样工作了。一个sql示例,过去执行得很好,但现在抛出一个错误 sql=从匹配_表中选择*,其中dec= 表结构Sql 隐式数据类型不再在oracle 11g中工作,sql,tomcat,oracle11g,Sql,Tomcat,Oracle11g,我们注意到,自从我们将tomcat从7.0.28升级到7.0.40后,oracle sql中的隐式数据类型已经不再像以前那样工作了。一个sql示例,过去执行得很好,但现在抛出一个错误 sql=从匹配_表中选择*,其中dec= 表结构 COLUMN_NAME DATA_TYPE NULLABLE JOB_CD VARCHAR2(10) Yes DEC NUMBER Yes
COLUMN_NAME DATA_TYPE NULLABLE
JOB_CD VARCHAR2(10) Yes
DEC NUMBER Yes
MATCH_KEY VARCHAR2(70) Yes
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
int inserted =0;
try {
conn = BasicDataSourceManager.getConnection();
pst = conn.prepareStatement( sql );
pst.setString(1,dropDecInfo.getDec() );
rs = pst.executeQuery();
}catch(SQLException e){
e.printStackTrace();
}
..dropDecInfo.getDec以字符串形式返回dec代码
这段代码过去在tomcat服务器上工作……但现在我得到了……ORA-01858:在需要数字的地方找到了一个非数字字符
如果我在同一个linux机器上运行这个程序,就像从一个类中运行批处理java一样,该类具有一个shell脚本中的有效main,它工作得很好。对于没有使用to_date显式强制转换的日期字段,我们也遇到了类似的错误。我们将Oracle 11g与ojdbc14-10.2.0.0.jar一起使用。隐式日期转换问题表明,作为Oracle客户端的两个系统使用不同的NLS设置,这些设置会影响日期格式。隐式转换失败,因为解析的日期格式与数据库中的格式不匹配,反之亦然 隐式数字转换也可能发生同样的情况 Oracle OJDBC驱动程序使用一些查询Java环境语言设置的规则初始化NLS设置,Java环境是从OS环境派生的。因此,Tomcat启动脚本可能导致了更改
要解决此问题,请尝试在Java环境中或通过适当初始化每个Oracle连接来显式设置。那么,这是ojdbc问题,而不是tomcat问题。试着分别选择每一列,看看哪一列是问题所在。另外,为什么DEC字段上没有大小说明符?看起来很奇怪。您确定dropDecInfo.getDec返回的字符串可以隐式转换为数字,即字符串中没有非数字字符吗?这个查询真的和你发布的一样简单吗?如果您连接到另一个表,其中有一个varchar2列存储的数据主要是数字数据,那么您发布的错误会更常见。