在oracle pl / sql中将游标从内部过程返回到外部过程

时间:2011-01-10 07:37:31

标签: oracle plsql cursor sys-refcursor

我正在使用oracle PL / SQL程序。 我在另一个内部调用一个程序。我想将一个游标从嵌套过程返回到外部过程。 这可能吗? 它对程序有何不利影响?

以下是调用结构:

  Proc1( data1 IN integer, cursor1 OUT SYS_REFCURSOR ) {

               Proc2(data2 IN , cursor1 out) {
                       open cursor1 FOR
                select * from table;

               }
  }

1 个答案:

答案 0 :(得分:5)

以下是调用具有REF CURSOR OUT参数的过程的一个示例。

SQL> create or replace procedure p1(
  2    p_empno in emp.empno%type,
  3    p_rc   out sys_refcursor
  4  )
  5  as
  6  begin
  7    open p_rc
  8     for
  9     select *
 10       from emp
 11      where empno = p_empno;
 12  end;
 13  /

Procedure created.

SQL> create or replace procedure p2(
  2    p_empno  in emp.empno%type,
  3    p_rc    out sys_refcursor
  4  )
  5  as
  6  begin
  7    p1( p_empno, p_rc );
  8  end;
  9  /

Procedure created.

在这种情况下,我正在创建一个SQL * Plus替换变量rc,以演示如何调用p2。如果你用SQL * Plus以外的方式调用它,语法会有所不同,但一般原则是相同的。

SQL> var rc refcursor;
SQL> exec p2( 7900, :rc );

PL/SQL procedure successfully completed.

SQL> print rc

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM
---------- ---------- --------- ---------- --------- ---------- ----------
    DEPTNO   FAKE_COL        FOO
---------- ---------- ----------
      7900 SM2        CLERK           7698 03-DEC-81        950
        30          1