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