2016-12-20 11 views
0

Я рассмотрел ряд вопросов StackOverflow по этой проблеме, но не могу найти то, что имеет смысл. This one подходит ближе, но не показывает, как получить возвращаемое значение из функции.Возвращаемое значение из функции Oracle с использованием Mybatis

Вот мой картографа вызов:

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) всегда нуль.

Может ли кто-нибудь обнаружить проблему?

+0

Вы пробовали его с помощью recordId, javaType = long (собственный тип), а не Long (обертка объекта)? –

ответ

1

Если вы хотите, чтобы вернуться непосредственно результат, то SQL вызов должен быть: SELECT MYSCHEMA.MYPACKAGE.my_function(...)

Если вы хотите сохранить с вызовом функции в стиле вызова процедуры, что означает, что результат является OUT параметра (вы объявили его 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: косвенность требуется: функция запишет значение «Result» параметр где-то можно прочитать позже (после картографа вызова), вы также может использовать класс с свойством resultId.

+0

Это именно то, что мне нужно, большое спасибо! – user1071914