有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

iBatis 3、JAVA、ORACLE和函数

我在ORACLE中有一个函数,它花费很长时间并返回一个字符串

FUNCTION "GEN_NEXT_COD_NRE" (AN_ID_MEDIC IN NUMBER)
RETURN VARCHAR2

正如我所读到的,在iBATIS3中没有标签,也没有要设置的in或OUT映射

所以在我的刀里,我有这样的东西:

public String createNextNre(MedicContract contract);

我的地图是:

<select id="createNextNre" statementType="CALLABLE" resultType="string" parameterType="MedicContract">
{? = call GEN_NEXT_COD_NRE(#{idMedic})}
</select>

不幸的是,这种方法行不通。这就是错误:

SQLException: Missing IN or OUT parameter at index:: 2

问题在哪里


共 (1) 个答案

  1. # 1 楼答案

    看着how to call stored function with mybatis和胡闹,我通过简单的做得到了类似于工作的东西

    <select id="getTestFunction"
        statementType="CALLABLE"
        resultType="String">
        select TEST_PKG.test_function() from dual
    </select>
    

    这是因为在Oracle中,函数可以在select语句中调用。或者,如果将参数类设置为保留OUT param,调用语法也会起作用:

    <select id="getTestFunction2"
        statementType="CALLABLE"
        parameterType="com.somecom.test.model.TestBean">
        {
        #{value,mode=OUT,jdbcType=VARCHAR} = call SYS.UTL_RAW.CAST_TO_VARCHAR2(TEST_PKG.test_function())
        }
    </select>
    

    用TestBean。java是:

    public class TestBean {
        String value;
    
        public String getValue() { return value;}
        public void setValue(String value) { this.value = value;}
    }
    

    请注意,OUT参数是在参数类上设置的,而不是结果,因此您需要在DAO方法中对此进行一些操作:

    public TestBean getTestFunction2() {
        TestBean param = new TestBean();
        getSqlSession().selectOne("getTestFunction2",param);
        return param;
    }
    

    你发帖子已经有一段时间了,所以你可能已经知道了,但我发现这是我自己在寻找答案,所以我想我应该回复