首页 > 解决方案 > 如何从 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 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。

标签: oracleselectplsqlref-cursor

解决方案


推荐阅读