1

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

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

有人对解决方案有任何想法吗?先感谢您。

4

1 回答 1

2

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

方法是接下来的一系列步骤:

  1. 从 sys_refcursor 创建 XMLTYPE
  2. 通过 dbms_sql 解析 sys_refcursor,获取列信息
  3. 根据步骤 2 中的信息,创建动态 sql,它将通过 xpath 从 XMLTYPE 中选择

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

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

于 2015-04-02T03:57:03.853 回答