gpt4 book ai didi

oracle - 用mybatis 3调用pl/sql函数

转载 作者:行者123 更新时间:2023-12-04 18:09:51 28 4
gpt4 key购买 nike

我有一个在 pl/sql 中返回 bool 值的函数。我试过
直接获取那个 bool 值没有成功,所以现在我试图将它转换为字符串(我不想修改数据库):

<parameterMap id="publicObject"   type="map">
<parameter javaType="java.lang.Object" jdbcType="VARCHAR" mode="OUT" property="result" />
<parameter javaType="java.lang.String" jdbcType="VARCHAR" mode="IN" property="id" />
</parameterMap>

<select id="isPublicObject" parameterMap="publicObject" statementType="CALLABLE">

<![CDATA[
{
declare
v_bool BOOLEAN := TRUE;
begin
v_bool := PACKNAME.STF$IS_PUBLIC_OBJECT(#{id});
#{result} := CASE WHEN v_bool THEN 'TRUE' ELSE 'FALSE' END;
end;
}
]]>

</select>

然后我得到这个异常:
“查询数据库时出错。原因:org.apache.ibatis.type.TypeException:使用 JdbcType OTHER 为参数 #2 设置 null 时出错。尝试为此参数设置不同的 JdbcType 或不同的 jdbcTypeForNull 配置属性。原因:java.sql.SQLException :无效的列类型:1111 ####

此代码在数据库中正常工作:
declare
v_bool BOOLEAN := TRUE;
v_str VARCHAR2(5);
begin
v_bool := PACKNAME.STF$IS_PUBLIC_OBJECT('000000');
v_str := CASE WHEN v_bool THEN 'TRUE' ELSE 'FALSE' END;
dbms_output.put_line('result:');
dbms_output.put_line(v_str);
end;

最佳答案

我写了 parameterType & Map例子。它适用于我的测试数据。

XML:

<update id="isPublicObject" parameterType="map" statementType="CALLABLE">
declare
v_bool BOOLEAN := TRUE;
begin
v_bool := PACKNAME.STF$IS_PUBLIC_OBJECT(#{id});
#{result,jdbcType=VARCHAR,mode=OUT} := CASE WHEN v_bool THEN 'TRUE' ELSE 'FALSE' END;
end;
</update>

映射器:
public interface PLSQLMapper {
public void isPublicObject(Map<String, Object> parameterMap);
}

主要的:
PLSQLMapper mapper = session.getMapper(PLSQLMapper.class);

Map<String, Object> parameterMap = new HashMap<String, Object>();
parameterMap.put("id", 1);
mapper.isPublicObject(parameterMap);
System.out.println("result: " + parameterMap.get("result"));

关于oracle - 用mybatis 3调用pl/sql函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16859123/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com