Oracle 使用mybatis 3调用pl/sql函数

Oracle 使用mybatis 3调用pl/sql函数,oracle,plsql,mybatis,Oracle,Plsql,Mybatis,我有一个在pl/sql中返回布尔值的函数。我已经试过了 直接获取该布尔值而不成功,因此现在我尝试将其转换为字符串(我不想修改数据库): #{}语法只能用于参数替换。它不是在执行PL/SQL之后设置的变量。只能在生成准备好的语句之前设置它 一种前进的方法是使用存储过程并使用OUT参数来输出结果。我编写了参数类型&映射示例。它对我的测试数据有效 XML: 声明 v_bool布尔值:=真; 开始 v#bool:=PACKNAME.STF$是#PUBLIC_对象(#{id}); #{result,jd

我有一个在pl/sql中返回布尔值的函数。我已经试过了 直接获取该布尔值而不成功,因此现在我尝试将其转换为字符串(我不想修改数据库):

#{}语法只能用于参数替换。它不是在执行PL/SQL之后设置的变量。只能在生成准备好的语句之前设置它


一种前进的方法是使用存储过程并使用OUT参数来输出结果。

我编写了
参数类型
&
映射
示例。它对我的测试数据有效

XML:


声明
v_bool布尔值:=真;
开始
v#bool:=PACKNAME.STF$是#PUBLIC_对象(#{id});
#{result,jdbcType=VARCHAR,mode=OUT}:=当v_bool然后为'TRUE'或'FALSE'结束时的情况;
结束;

制图员:

public interface PLSQLMapper {
    public void isPublicObject(Map<String, Object> parameterMap);
}
公共接口PLSQLMapper{
public void isPublicObject(映射参数Map);
}
主要内容:

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"));
PLSQLMapper-mapper=session.getMapper(PLSQLMapper.class);
Map参数Map=newhashmap();
参数map.put(“id”,1);
映射器.isPublicObject(参数映射);
System.out.println(“结果:+parameterMap.get(“结果”);

MyBatis用户指南:
parameterMap
-“这是一种不推荐使用的引用外部parameterMap的方法。请使用内联参数映射和parameterType属性。”请参见这里的示例:我现在这样做是为了测试,但是我不想只在生产中更改数据库,因为有几个项目依赖于它。这对我来说是可行的,我的代码的主要区别是大括号。如果我把它们放在那里,它就不起作用了,所以我尝试了很多东西,但主要的一点是支架。谢谢大家!@HernanDiaz,我使用的是3.2.3-SNAPSHOT(但我用3.1检查了它-它也能工作),我更喜欢
parameterType
(还有Map或我自己的对象),因为
parameterMap
是。你能告诉我为什么你知道你不应该使用大括号{}吗?我看过一些代码示例,据我所知,它们总是使用它们,括号是SQL92转义语法,Oracle语法是不带括号的begin end block。我没有看到使用begin-end和大括号的示例。我可能错了,但我是甲骨文的新手。我也是!!你救了我的命()
<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"));