Чтобы проверить это, я определил функцию следующим образом.
create or replace function f_foo_function(
foo in varchar,
foo_output out integer,
error out varchar2
) return integer is
begin
foo_output := 1;
error := 'No error';
return 99;
end;
foo_output
определяется как INTEGER
, поскольку BOOLEAN
недопустимо, как указано APC.
Метод mapper определен как ...
void getFooFunction(FooFuncParam param);
Параметр является POJO.
public class FooFuncParam {
private Integer result;
private String foo;
private boolean fooOutput;
private String error;
// getters/setters
}
А вот оператор mapper.
<update id="getFooFunction" statementType="CALLABLE">
{#{result,jdbcType=INTEGER,mode=OUT} = call f_foo_function(
#{foo,mode=IN},
#{fooOutput,jdbcType=INTEGER,javaType=_boolean,mode=OUT},
#{error,jdbcType=VARCHAR,mode=OUT})}
</update>
Обратите внимание, чтоjavaType
указано для преобразования INTEGER
в boolean
.
Если функция устанавливает 0
в foo_output
, false
устанавливается в FooFuncParam.fooOutput
. И ненулевое значение означает true
. При необходимости вы можете написать собственный обработчик типа для изменения поведения.
Вот исполняемый файл demo , протестированный с Oracle 18c и ojdbc 19.3.0.0.