我正在尝试找到更好的方法来选择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 usign JDBC 连接 - 它只支持返回标量类型,反序列化REFCURSOR
失败;也不能从源表中直接选择)
我找到了这个选择,它从 REFCURSOR 创建 XML,然后从这个 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。