JDBC CallableStatement - вызов нескольких хранимых процедур за один раз - PullRequest
0 голосов
/ 29 января 2019

Чтобы вызвать хранимую процедуру 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 Ответ

0 голосов
/ 29 января 2019

Вы можете заключить их в анонимный блок:

con.prepareCall("begin prepare_proc(); ? := my_procedure(?); end;");

Подробнее о различиях.

Присвоение возвращаемого значения функции привязкепеременная (первая ?) теперь является назначением PL / SQL внутри анонимного блока, поэтому она использует ? := ....В исходном коде вы использовали call оператор SQL версия (? = call ...), а JDBC использует простой = для присвоения переменной связывания.

Предположительно my_procedure на самом деле my_function, иначе у него не будет возвращаемого типа ...

Вероятно, было бы более приемлемым иметь процедуру-оболочку (или функцию), которая выполняет оба вызова, а затем просто вызватьта единственная обертка над JDBC.

...