【问题标题】:iBatis 3, JAVA, ORACLE and FunctionsiBatis 3、JAVA、ORACLE 和函数
【发布时间】:2012-10-22 14:27:02
【问题描述】:

我在 ORACLE 中有一个函数,它需要一个 LONG 并返回一个字符串。

FUNCTION "GEN_NEXT_COD_NRE" (AN_ID_MEDIC IN NUMBER)
RETURN VARCHAR2

正如我所读,在 iBatis 3 中没有标签,也没有设置 IN 或 OUT 映射。

所以在我的 DAO 中,我有这样的东西:

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

问题出在哪里?

【问题讨论】:

    标签: java oracle ibatis


    【解决方案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 参数,则调用语法也可以使用:

    <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;
    }
    

    自从您发布以来已经有一段时间了,所以您可能已经弄清楚了,但是我发现这是我自己在寻找答案,所以我想我应该回复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 2011-07-07
      • 1970-01-01
      相关资源
      最近更新 更多