设为首页 - 加入收藏 PHP编程网 - PHP站长网 (http://www.52php.cn)- 电商,百科,编程,业界,移动互联,5G,云计算,站长网!
热搜: java 配置 原来 google
当前位置: 首页 > 站长百科 > 正文

oracle – 使用mybatis 3调用pl / sql函数

发布时间:2021-05-16 02:14 所属栏目:[站长百科] 来源:网络整理
导读:我有一个函数在pl / sql中返回一个布尔值.我试过了 直接获取该布尔值但没有成功,所以现在我正在尝试将其转换为字符串(我不想修改数据库): parameterMap id="publicObject" type="map"parameter javaType="java.lang.Object" jdbcType="VARCHAR" mode="OUT

我有一个函数在pl / sql中返回一个布尔值.我试过了
直接获取该布尔值但没有成功,所以现在我正在尝试将其转换为字符串(我不想修改数据库):

<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&地图示例.它适用于我的测试数据.

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"));

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

推荐文章
热点阅读