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.

Другие вопросы по тегам