JDBC CallableStatement - вызов нескольких хранимых процедур за один раз
Чтобы вызвать хранимую процедуру Oracle, используя только простой JDBC в Java, мы могли бы сделать что-то вроде этого:
con.prepareCall("{ call ? = my_procedure(?) }");
callStm.registerOutParameter(1, Types.INTEGER);
callStm.setInt(2, -100);
callStm.execute()
Я хочу знать, возможно ли как-то вызвать более одной процедуры внутри одной prepareCall
заявление? Например:
con.prepareCall("{ call prepare_proc(); ? = my_procedure(?) }");
Конечно, это не правильно, но как это исправить и вызвать две или более процедур за один прием?
1 ответ
Вы можете обернуть их в анонимный блок:
con.prepareCall("begin prepare_proc(); ? := my_procedure(?); end;");
Присвоение возвращаемого значения функции переменной bind (первое ?
) теперь является назначением PL/SQL внутри анонимного блока, поэтому он использует ? := ...
, В исходном коде вы использовали call
Версия оператора SQL (? = call ...
), а JDBC использует простой =
для присвоения переменной связывания.
предположительно my_procedure
на самом деле my_function
иначе у него не будет возвращаемого типа...
Вероятно, было бы более приемлемо иметь процедуру-оболочку (или функцию), которая выполняет оба вызова, а затем просто вызывать эту единственную оболочку через JDBC.