Как указано в CallableStatement
, синтаксис JDB C для вызова хранимых процедур является одним из этих
{call ProcedureName(?, ...)}
{? = call FunctionName(?, ...)}
Любой из параметров может быть параметром OUT. Возвращаемое значение, конечно, является типом параметра OUT.
Итак, если у вас была хранимая процедура с 2 параметрами, а второй параметр был параметром OUT, вы должны кодировать его как:
String sql = "{call MyProcedure(?, ?)}";
try (CallableStatement stmt = conn.prepareCall(sql)) {
stmt.setInt(1, p1);
stmt.registerOutParameter(2, Types.VARCHAR);
...
}
Если эта же процедура преобразуется в функцию, вы должны кодировать ее следующим образом:
String sql = "{? = call MyFunction(?)}";
try (CallableStatement stmt = conn.prepareCall(sql)) {
stmt.registerOutParameter(1, Types.VARCHAR);
stmt.setInt(2, p1);
...
}
Если вы не можете изменить код Java, выполняющий вызов, вам необходимо преобразовать свои функции обратно в процедуры .