JDBC: вызов функции Oracle как процедура - PullRequest
0 голосов
/ 05 июня 2018

Я использую процедуру Oracle и пакетирую ее.

CallableStatement st = con.prepareCall ("{call MyProc (123)}");
...
st.addBatch ();

Теперь процедура была преобразована в функцию.Поэтому пакетная обработка больше не работает, и игнорирование возвращаемого значения также не работает.Если я не установлю «? =», Функция не будет найдена.

CallableStatement st = con.prepareCall ("{? = call MyFunc (123)}");

Но без пакетной обработки слишком много времени для выполнения всех вызовов.Я должен сделать много из них.

Так есть ли способ, которым я могу игнорировать возвращаемое значение на уровне JDBC, не касаясь функции?Я хочу вернуть свою порцию.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

для oracle db это будет выглядеть так:

private Long getResultOfFunction(final long param1) {

    CallableStatementCallback<Long> action = new CallableStatementCallback<Long>() {
        public Long doInCallableStatement(CallableStatement cs)
                throws SQLException, DataAccessException {

            cs.registerOutParameter(1, Types.NUMERIC);
            cs.setLong(2, param1);

            cs.executeQuery();

            return cs.getLong(1);
        }
    };

    return getJdbcTemplate().execute("{call ? := package_name.function_name (?)}", action);
}
0 голосов
/ 05 июня 2018

Вы, конечно, можете использовать синтаксис Oracle и игнорировать значение функции в блоке PL / SQL.

Примерно так

con.prepareCall("""
declare
 v_ignore number;
begin
  v_ignore := MyFunc (?);
end;""")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...