java - MyBatis 调用带有返回值和 out 参数的存储函数

标签 java oracle mybatis

我正在尝试调用这样的函数:

PCK_BEE.FUN_FOO(A IN VARCHAR2, B OUT T_CURSOR) RETURN VARCHAR2;
--
TYPE T_CURSOR IS REF CURSOR;
--
TYPE R_DEP  IS RECORD (P_CODE VARCHAR2(3),  P_DESC   VARCHAR2(30));

在 MyBatis 上我创建了一个对象:

public class LovPrc {
   private List<ProcedureTypeLov> lov;
   private String error;

   // Getters and Setters
}

ProcedureTypeLov:

public class ProcedureTypeLov {
   private String code;
   private String description;

   // Getters and Setters
}

映射器:

<select id="lovDep" resultType="LovPrc" parameterType="map" 
           statementType="CALLABLE">
    { #{error, mode=OUT, jdbcType=VARCHAR} = call 
        PCK_BEE.FUN_FOO(#{A, mode=IN,
                        #{lov, jdbcType=CURSOR, 
                              mode=OUT, resultMap=LovPrc, javaType=java.sql.ResultSet})}
</select>

POJO 正在返回对象,但我得到的是 null。

我应该如何调用这种类型的函数并在 POJO 上返回它?无法将其更改为两个参数都为 OUT 的 PROCEDURE

最佳答案

处理了这个,这就是我让它工作的方式:

<select id="lovDep" parameterType="LovPrc" statementType="CALLABLE">
{ #{error,jdbcType=VARCHAR,mode=OUT} = call PCK_BEE.FUN_FOO(#{A, mode=IN, jdbcType=VARCHAR},
                                                            #{lov, jdbcType=CURSOR, resultMap=MapLov, mode=OUT})}
</select>

<resultMap id="MapLov" type="ProcedureTypeLov">
     <result column="A (name of the column returned by CURSOR)" property="a"/>
</resultMap>

LovPrc 作为调用的参数对象和处理响应的输出对象。

关于java - MyBatis 调用带有返回值和 out 参数的存储函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50172473/

相关文章:

java - 了解 Java 中字符串比较的工作原理

java - Hazelcast 终止用户 session

java - 如何使用 Oracle 目录别名和 BFILE 对象将上传的文件写入磁盘?

java - MyBatis 3 - 从映射器获取 SQL 字符串

java - 我可以将 myBatis 配置为使用构建器模式创建类的实例吗?

java - 如何使用 Dropwizard 和 JDBI 为 SQLite 启用外键约束?

java - 分发 Java 应用程序和文件

sql - 使用一个 SQL 查询进行分组和透视

java.sql.SQLSyntaxErrorException : ORA-00933: SQL command not properly ended for INSERT INTO SELECT

java - Mybatis几个jndi名称