2012-10-22 1 views
2

오라클에 FUNCTION을 사용하여 LONG을 취하고 STRING을 반환합니다.iBatis 3, JAVA, ORACLE 및 함수

FUNCTION "GEN_NEXT_COD_NRE" (AN_ID_MEDIC IN NUMBER) 
RETURN VARCHAR2 

내가 읽은 것처럼, 바티스 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 

어디에서 문제가 발생합니까?

답변

2

how to call stored function with mybatis를 찾고, 그리고 장난, 단순히 오라클의 기능을 select 문에서 호출 때문에이 작동

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

을 수행하여 작업 비슷한 얻었다.

public class TestBean { 
    String value; 

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

참고 OUT의 PARAM이 당신의 매개 변수 클래스에 설정되어 있는지 : TestBean.java 존재로

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

: 당신이 당신의 매개 변수 클래스는 OUT의 PARAM을 유지하기 위해 설정 한 경우 교대로 호출 구문 작동 이것을 찾고 당신이 당신은 아마 그것을 알아 냈다 너무 게시 된 이후 시간이 지났는데

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

,하지만 난 발견하지 그 결과, 그래서 당신은 당신의 DAO 방법에 그것에 대해 뭔가를해야합니다 나 자신에게 대답 해 내가 대답해야한다고 생각했다.