여기 파라미터 REF 커서 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
감사합니다. 이러한 종류의 전화 호출은 성능 문제가 있습니다. 절차에 악영향을 미칩니 까? – cherit
@tito - REF CUSROR는 포인터 일 뿐이므로 여러 프로 시저간에 REF CURSOR를 전달하는 오버 헤드가 매우 적습니다. REF CURSOR를 잘못 사용하면 성능이 저하 될 수 있습니다. 예를 들어 중첩 루프를 작성하는 경우 오라클이 조인을 처리하는 대신 REF CURSOR에서 많은 양의 단일 행 가져 오기를 수행하는 것이 좋습니다 BULK COLLECT를 수행하는 것보다 최적화 할 가능성이 높습니다. –