Я пытаюсь найти лучший подход для выбора из 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.
next
для выборки строк. - person Tony Andrews   schedule 08.06.2020