[英]How to call Oracle function which return Oracle record type in MyBatis
[英]How can i call a function that return a BOOLEAN using MyBatis?
我正在使用 MyBatis 在 PL SQL 數據庫中調用 function。 function 的 OUT 參數之一為 BOOLEAN,如下所示:
FUNCTION f_foo_function(foo IN VARCHAR, foo_output OUT BOOLEAN, error OUT VARCHAR2)
My problem is when i try to call the function from my xml mapper, every try i do mybatis don't recognize the boolean output and throw me and error like incompatible types. 此外,當我嘗試從 PLSQL Developer 測試 function 時,它會進行如下轉換:pout_boolean_result:= sys.diutil.bool_to_int(pout_boolean_result);
把 boolean 還給我。
可以忽略 integer 並指定 MyBatis 將輸出視為 boolean? 我怎樣才能做到這一點?
我的 xml 是這樣的:
<select id="getFooFunction" statementType="CALLABLE">
{#{result, mode=OUT, jdbcType=INTEGER} = call f_foo_function
(
#{foo, mode=IN, jdbcType=VARCHAR},
#{foo_output, mode=OUT, jdbcType=DOUBLE},
#{error, mode=OUT, jdbcType=VARCHAR}
)
}
</select>
為了測試它,我定義了 function 如下。
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 指出的那樣無效。
映射器方法定義為...
void getFooFunction(FooFuncParam param);
參數是一個 POJO。
public class FooFuncParam {
private Integer result;
private String foo;
private boolean fooOutput;
private String error;
// getters/setters
}
這是映射器聲明。
<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
。
如果 function 將0
設置為foo_output
,則將false
設置為FooFuncParam.fooOutput
。 非零值意味着true
。 如有必要,您可以編寫自定義類型處理程序來更改行為。
這是一個使用 Oracle 18c 和 ojdbc 19.3.0.0 測試的可執行演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.