2016-12-20 4 views
0

이 문제에 대한 여러 가지 StackOverflow 질문을 살펴 봤지만 어떤 의미가 있는지 찾을 수 없습니다. This one은 가장 비슷하지만 함수에서 반환 값을 얻는 방법을 보여주지 않습니다.Mybatis를 사용하는 Oracle 함수의 반환 값

public Long callMyFunction(@Param("recordId") Long recordId, @Param("otherId") Long otherId, @Param("date") Date date, @Param("comments") String comments); 

가 여기 매퍼 XML의 :

여기 내 매퍼 전화의

<select id="callMyFunction" parameterType="map" statementType="CALLABLE" resultType="java.lang.Long"> 
    { #{resultId,javaType=java.lang.Long,jdbcType=NUMERIC,mode=OUT} = call MYSCHEMA.MYPACKAGE.my_function(
    #{recordId,jdbcType=NUMERIC,mode=IN}, 
    #{otherId,jdbcType=NUMERIC,mode=IN}, 
    #{date,jdbcType=DATE,mode=IN}, 
    #{comments,jdbcType=VARCHAR,mode=IN})} 
</select> 

호출 작동하지만 반환 값 (resultId)는 항상 null입니다.

아무도 문제를 발견 할 수 있습니까?

+0

long (객체 래퍼) 대신 javaType = long (기본 유형)으로 시도해 보셨습니까? –

답변

1

직접 결과를 반환 할 경우, SQL 호출해야합니다 : SELECT MYSCHEMA.MYPACKAGE.my_function(...)

프로 시저 호출 스타일의 함수를 호출하여 유지하려는 경우, 그 결과는 OUT 매개 변수 의미 (사용자가 env로 OUT 선언). 최소 변화는 매퍼 메소드 서명에 매개 변수를 추가로 구성 될 것이다 : public Long callMyFunction(@Param("recordId") Long recordId, @Param("otherId") Long otherId, @Param("date") Date date, @Param("comments") String comments, @Param("resultIdContainer") Map<String, Long> resultIdContainer);

를 XML에서 다음 resultType을 잊지 들 선택이입니다. 그리고 전화 :하지 { #{resultIdContainer.resultId, javaType=java.lang.Long,jdbcType=NUMERIC,mode=OUT} = call ...

나는 resutlId을 포함하고 여기에지도를 사용하는 것이이 : 간접가 필요합니다 기능은 당신이 (당신의 매퍼 호출 후) 나중에 읽을 수있는 곳 매개 변수 '결과'값을 기록합니다, 당신은 또한 resultId 속성이있는 클래스를 사용할 수 있습니다.

+0

그건 정확히 내가 필요로했던 것입니다, 정말 고마워요! – user1071914