【发布时间】:2020-01-31 23:18:28
【问题描述】:
我正在使用 MyBatis 调用 PL SQL 数据库中的函数。该函数的 OUT 参数之一为 BOOLEAN,如下所示:
FUNCTION f_foo_function(foo IN VARCHAR, foo_output OUT BOOLEAN, error OUT VARCHAR2)
我的问题是当我尝试从我的 xml 映射器调用该函数时,我每次尝试 mybatis 都无法识别布尔输出并抛出我和错误,比如不兼容的类型。此外,当我尝试从 PLSQL Developer 测试函数时,它会进行这样的转换
:pout_boolean_result := sys.diutil.bool_to_int(pout_boolean_result);
并将布尔值返回给我。
是否可以忽略该整数并指定 MyBatis 将输出视为布尔值?我该怎么做?
我的 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>
【问题讨论】:
-
您的数据库是什么版本的 Oracle?我记得,11g 的 JDBC 驱动程序没有布尔类型的概念
-
请将您遇到的实际错误添加到问题中
-
带有 OUT 参数的函数是不好的做法,尤其是因为我们不能在 SELECT 语句中使用它们。函数应该只返回(如在关键字 RETURN 中)一个值。此外,Oracle SQL 不支持 BOOLEAN 数据类型。因此 SYS.DIUTIL.BOOL_TO_INT()。恐怕您需要重写您的函数,使其符合 Oracle SQL 规则。
标签: java oracle plsql mybatis plsqldeveloper