4

Oracle PL/SQL プロシージャを使用しています。あるプロシージャを別のプロシージャ内で呼び出しています。ネストされたプロシージャから外側のプロシージャにカーソルを戻したい。これは可能ですか?手順にどの程度悪影響を及ぼしますか?

以下は呼び出し構造です。

  Proc1( data1 IN integer, cursor1 OUT SYS_REFCURSOR ) {

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

               }
  }
4

1 に答える 1

6

以下は、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.

この場合、p2 の呼び出し方法を示すために、SQL*Plus 置換変数 rc を作成しています。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
于 2011-01-10T08:43:13.543 に答える