0
我将我的Java EE应用程序从Java 1.4迁移到Java 6,并从OC4J迁移到WebLogic 10.3.3。我遇到了一个存储过程调用问题,它在OC4J上的Java 1.4中工作,但不再适用于WebLogic上的Java 6。存储过程的定义是这样的:迁移到Weblogic后Oracle存储过程中断
create or replace procedure sp_report
(
/* snip 68 parameters */
rs OUT pkg_recordset.rs_ref_cursor
)
AS ...
其中rs_ref_cursor是:
type rs_ref_cursor is Ref CURSOR;
我的Java代码如下所示:
public final static String CALL_REPORT = "{call SP_REPORT"
+ "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,"
+ "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";
...
DriverManager.registerDriver (new oracle.jdbc.OracleDriver());
conn = DriverManager.getConnection("jdbc:oracle:thin:@[server]:[port]:[sid]", "[username]", "[password]");
cstmt = conn.prepareCall(CALL_ALPHA_REPORT);
/* set 68 other parameters */
cstmt.registerOutParameter("rs", OracleTypes.CURSOR);
...
这总是导致这个异常的调用的registerOutParameter :
SQL Exception: 17004: Invalid column type: 246
java.sql.SQLException: Invalid column type: 246
at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:199)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:263)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:271)
at oracle.jdbc.driver.OracleStatement.getInternalType(OracleStatement.java:3532)
at oracle.jdbc.driver.OracleCallableStatement.registerOutParameterInternal(OracleCallableStatement.java:127)
at oracle.jdbc.driver.OracleCallableStatement.registerOutParameterInternal(OracleCallableStatement.java:2181)
at oracle.jdbc.driver.OracleCallableStatement.registerOutParameter(OracleCallableStatement.java:2094)
at oracle.jdbc.driver.OracleCallableStatementWrapper.registerOutParameter(OracleCallableStatementWrapper.java:1593)
...
两
有几件事情我已经试过了所有的结果在相同的错误:
- 从ojdbc14.jar的切换到Oracle的网站
- 从ojdbc14.jar的开关ojdbc6.jar从WebLogic的lib添加到ojdbc6.jar夹
- 使用在WebLogic控制台定义的JDBC连接(既薄又薄XA驱动器)
- 使用java.sql.Types.OTHER代替OracleTypes.CURSOR(虽然在Oracle异常变化从246至1111后的数)
- 移动registerOutParameter状态NT才能之前我设置其他参数68
- 上述
的各种组合感谢您的帮助。