隐式数据类型不再适用于oracle 11g

时间:2014-02-11 19:27:54

标签: sql tomcat oracle11g

我们一直注意到,因为我们将tomcat从7.0.28升级到7.0.40,oracle sql中的隐式数据类型的工作方式与以前不同。用于执行的SQL的示例很好......但现在抛出错误...

sql =“select * from match_table,其中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(来自具有有效main的类)来自shell脚本,它可以正常工作。我们在日期字段中遇到类似错误,这些日期字段未使用to_date显式转换。我们正在使用带有ojdbc14-10.2.0.0.jar的Oracle 11g。

1 个答案:

答案 0 :(得分:0)

隐式日期转换的问题表明,充当Oracle客户端的两个系统使用影响日期格式的不同NLS设置。隐式转换失败,因为使用与数据库中的格式不匹配的日期格式解析日期(反之亦然)。

隐式号码转换也是如此。

Oracle OJDBC驱动程序使用一些查询Java环境语言设置的规则初始化NLS设置,该环境源自OS环境。因此,Tomcat启动脚本可能会导致更改。

要修复它,请尝试在Java环境中或通过适当初始化每个Oracle连接进行显式设置。