Sql 隐式数据类型不再在oracle 11g中工作

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

我们注意到,自从我们将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         
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列存储的数据主要是数字数据,那么您发布的错误会更常见。