将SYS_REFCURSOR提取到包含未知列的表中

时间:2015-04-01 19:54:06

标签: sql oracle oracle11g sys-refcursor

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

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

有没有人对解决方案有任何想法?提前谢谢。

1 个答案:

答案 0 :(得分:2)

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

方法是下一步骤:

  1. 从sys_refcursor创建XMLTYPE
  2. 通过dbms_sql解析sys_refcursor,获取有关列的信息
  3. 创建动态sql,将根据步骤2中的信息通过xpath从XMLTYPE中选择
  4. 简单的例子,说明这个想法:

    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