Параметры JDBC CallableStatement и Oracle SYS_REFCURSOR IN? - PullRequest
2 голосов
/ 20 апреля 2010

Почти то, что написано в названии, как, черт возьми, это должно быть сделано?

В основном мне нужно передать нулевой (пустой?) Ref-курсор в качестве параметра IN для хранимой процедуры.

/** spring's PreparedStatementSetter#setValues(...) */
public void setValues(PreparedStatement ps) throws SQLException {
    CallableStatement cs = (CallableStatement) ps;
    cs.setString(1,"constant");
    //this is the IN param
    cs.setNull(2, OracleTypes.CURSOR);
    //this is the OUT param
    cs.registerOutParameter(3, OracleTypes.CURSOR);
}

И это не с:

caused by: java.sql.SQLException: Unsupported feature: sqlType=-10
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
    at oracle.jdbc.driver.OraclePreparedStatement.setNullCritical(OraclePreparedStatement.java:4399)
    at oracle.jdbc.driver.OraclePreparedStatement.setNullInternal(OraclePreparedStatement.java:4161)
    at oracle.jdbc.driver.OracleCallableStatement.setNull(OracleCallableStatement.java:4472)

Я в растерянности, попробовал несколько разных способов сделать это, но я не смог найти никаких примеров по этому поводу и не знаю, как это сделать правильно.

1 Ответ

0 голосов
/ 20 апреля 2010

Мой java немного ржавый, но вы должны иметь возможность инициализировать переменную REF CURSOR в блоке PL / SQL:

String statement = "DECLARE\n" +
                       "l_cursor SYS_REFCURSOR;\n" +
                   "BEGIN\n" +
                       "your_procedure(?, l_cursor, ?);\n" +
                   "END;"
CallableStatement cs = yourConnection.prepareCall(statement);
// bind first and last parameter
cs.setString(1,"constant");
cs.registerOutParameter(2, OracleTypes.CURSOR);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...