Как передать КУРСОР в качестве параметра функции Oracle из MyBatis

#java #mybatis

#java #mybatis

Вопрос:

Мы используем MyBatis для ORM. Мне нужно вызвать функцию Oracle, которая принимает курсор в качестве параметра. Было бы идеально, если бы MyBatis мог сопоставить объект Java с курсором, но я сомневаюсь, что это возможно.

Есть идеи, как это сделать?

Пожалуйста, обратите внимание, что я знаю, как сопоставить курсор, возвращенный из функции, с объектом Java. Проблема в другом.

Ответ №1:

Кажется, что единственное решение — создать блок, объявить курсор и передать его функции вручную:

 <select id="..." parameterType="..." statementType="CALLABLE">
    declare
          my_cursor SYS_REFCURSOR;
    begin
          OPEN my_cursor FOR
                    <foreach item="item" collection="..." separator=" union all ">
                    SELECT #{item.key} as key, ... FROM dual
                    </foreach> ;

        #{result,jdbcType=CURSOR,mode=OUT,resultMap=...,javaType=java.sql.ResultSet} := our_function(my_cursor => my_cursor);
    end;
</select>