将 SYS_REFCURSOR 提取到具有未知列的 table

Fetch SYS_REFCURSOR into a table with unknown columns

我有一个程序,其中 return 将 SYS_REFCURSOR 作为 OUT 参数。我想做的是调用该过程,并在另一个过程中使用 returned SYS_REFCURSOR。在第二个过程中,我需要 运行 一个 GROUP BY 结果, return 它在另一个 SYS_REFCURSOR.

我遇到的问题是我事先不知道列名或列数。

有人有解决方案吗?提前谢谢你。

实际上,你可以做到这一点,但它需要一些努力,而且在大多数情况下,它只是矫枉过正。

方法是接下来的步骤:

  1. 从 sys_refcursor
  2. 创建 XMLTYPE
  3. 通过 dbms_sql 解析 sys_refcursor,获取有关列的信息
  4. 根据步骤 2
  5. 中的信息,通过 xpath 从 XMLTYPE select 创建动态 sql

简单的例子,来说明这个想法:

select EMPNO, count(*) from xmltable( ‘/ROWSET/ROW’ PASSING xmltype(CURSOR( SELECT E.EMPNO, E.ENAME, D.DNAME, D.DEPTNO FROM SCOTT.EMP E, SCOTT.DEPT D WHERE e.deptno=D.DEPTNO )) columns EMPNO PATH ‘EMPNO’, ENAME PATH ‘ENAME’, DNAME PATH ‘DNAME’ , DEPTNO PATH ‘DEPTNO’ ) group by EMPNO