Хранимая процедура Oracle прервалась после перехода на Weblogic - PullRequest
0 голосов
/ 21 февраля 2012

Я перевожу свое приложение Java EE с Java 1.4 на Java 6 и перехожу с OC4J на WebLogic 10.3.3.У меня проблема с вызовом хранимой процедуры, который работал в Java 1.4 на OC4J, но больше не работает в Java 6 на WebLogic.Определение хранимой процедуры выглядит следующим образом:

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 на ojdbc6.jar сВеб-сайт Oracle
  2. Переключение с ojdbc14.jar на ojdbc6.jar из папки lib weblogic
  3. Использование соединения JDBC, определенного в консоли WebLogic (драйверы Thin и Thin XA)
  4. Использование java.sql.Types.OTHER вместо OracleTypes.CURSOR (хотя число после исключения Oracle изменяется с 246 на 1111)
  5. Перемещение оператора registerOutParameter до того, как я установил остальные 68 параметров
  6. Различные комбинации вышеперечисленного

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 22 февраля 2012

Я нашел решение.

Короткая версия: не включайте быструю замену в weblogic.xml

Более длинную версию: включите быструю замену, винты вверх, как работают целые, вместозначение OracleTypes.CURSOR, равное -10, было на самом деле 246.

У меня была та же проблема, что и у этого парня: https://forums.oracle.com/forums/thread.jspa?threadID=1104780

...