Oracle java.sql.SQLException:缺少定义

Oracle java.sql.SQLException:缺少定义,oracle,jdbc,Oracle,Jdbc,我们有一个非常简单的Java代码,它使用CallableStatement API执行Oracle存储过程。Oracle存储过程没有定义输出参数,但是在Java代码中,我们试图注册一个OUT参数并检索它: cs = cnDBCon.prepareCall("{call "+strStoredProcedureName+ "}"); cs.registerOutParameter(1, Types.NUMERIC); cs.execute(); int isOk = cs.getInt(1

我们有一个非常简单的Java代码,它使用CallableStatement API执行Oracle存储过程。Oracle存储过程没有定义输出参数,但是在Java代码中,我们试图注册一个OUT参数并检索它:

 cs = cnDBCon.prepareCall("{call "+strStoredProcedureName+ "}");
 cs.registerOutParameter(1, Types.NUMERIC);
 cs.execute();
 int isOk = cs.getInt(1);
根据javaapi(),当返回值为sqlnull时,结果为0

当我们在Java7/WebLogic12.1.3上运行时,它工作得非常好。由于切换到Java8/WebLogic 12.2.1,我们开始出现错误:

java.sql.SQLException:缺少定义
位于oracle.jdbc.driver.Accessor.isNull(Accessor.java:744)
位于oracle.jdbc.driver.NumberCommonAccessor.getInt(NumberCommonAccessor.java:73)
在oracle.jdbc.driver.OracleCallableStatement.getInt(OracleCallableStatement.java:1815)
位于oracle.jdbc.driver.OracleCallableStatementWrapper.getInt(OracleCallableStatementWrapper.java:780)
位于weblogic.jdbc.wrapper.CallableStatement\u oracle\u jdbc\u driver\u OracleCallableStatementWrapper.getInt(未知源)


显而易见的选择是更新存储过程或java代码,但我想知道行为改变的原因。它是一个更严格的JDBC驱动程序吗?

您需要检查Oracle JDBC驱动程序的版本,而不是weblogic版本。@Mark Rotterveel。是的,可能是这样,但我试图找到某种解释。我想知道到底发生了什么。