2012-02-21 45 views
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) 
    ... 

有几件事情我已经试过了所有的结果在相同的错误:

  1. 从ojdbc14.jar的切换到Oracle的网站
  2. 从ojdbc14.jar的开关ojdbc6.jar从WebLogic的lib添加到ojdbc6.jar夹
  3. 使用在WebLogic控制台定义的JDBC连接(既薄又薄XA驱动器)
  4. 使用java.sql.Types.OTHER代替OracleTypes.CURSOR(虽然在Oracle异常变化从246至1111后的数)
  5. 移动registerOutParameter状态NT才能之前我设置其他参数68
  6. 上述

的各种组合感谢您的帮助。

回答

0

我找到了解决方案。

短版:在weblogic.xml不能够快速交换

加长版:实现快速交换砸了怎么整数工作,所以不是OracleTypes.CURSOR是-10的价值,它实际上是242.

我当时和这家伙有完全一样的问题:https://forums.oracle.com/forums/thread.jspa?threadID=1104780