Как выбрать из refcursor

Я пытаюсь найти лучший подход для выбора из REFCURSOR. Допустим, есть такая функция:

CREATE OR REPLACE FUNCTION get_batches_to_export(p_batch_type varchar2 := NULL) 
   RETURN SYS_REFCURSOR
AS
   o_cursor   SYS_REFCURSOR;
BEGIN
   OPEN o_cursor FOR
      SELECT batch_id
        FROM batches
       WHERE batch_type = p_batch_type OR p_batch_type IS NULL;
​
   RETURN o_cursor;
END;

Теперь мне нужно выбрать содержимое из этой таблицы с помощью requral select (это ограничение клиентского приложения - NiFi использует JDBC-соединение - оно поддерживает только возвращаемые скалярные типы, десерализация REFCURSOR не работает; также прямой выбор из исходной таблицы невозможен)

Я нашел этот выбор, он создает XML из REFCURSOR, а затем извлекает значения из этого XML:

SELECT extractvalue(value(batches_list),'ROW/BATCH_ID') batch_id
FROM table(xmlsequence(get_batches_to_export())) batches_list

Любая идея, как избежать части XML (вызовы функций xmlsequence, extractvalue и value)? Также есть ограничение: я не могу создавать какие-либо другие вспомогательные типы данных или объекты — можно использовать только select.


person Jirka Meluzin    schedule 05.06.2020    source источник
comment
Вы не должны выбирать из курсора ref. Вы извлекаете из него. Я думаю, что в JDBC вы используете метод next для выборки строк.   -  person Tony Andrews    schedule 08.06.2020
comment
Я ожидаю, что может быть функция, которая будет делать то же самое, что и xmlsequence, которая выдает результат, потребляемый таблицей функций.   -  person Jirka Meluzin    schedule 09.06.2020
comment
Но каким будет тип данных возвращаемого значения такой функции? Курсор ref может возвращать что угодно.   -  person Tony Andrews    schedule 09.06.2020