[ Oracle - Procedure 문법_Cursor_SubQuery ]

 

Cursor_SubQuery 문

커서 서브 쿼리

 

커서 서브 쿼리는 Oracle8 이후부터 SQL 엔진에서 지원되어 온 기능이며, Oracle9i는 이러한 지원을  PL/SQL 엔진으로 확대하였습니다.  

커서 서브 쿼리는 커서 수식에 대한 매 평가마다 중첩된 커서를 오픈합니다.

부모 쿼리의 각각의 행에 대해, 해당 커서 수식에 대응하는 SELECT 리스트의 커서를 반환합니다.

서브 쿼리의 결과를 추출하기 위한 인출이 수행되어야 합니다.

 

사용)

PL/SQL에서, 커서 서브 쿼리는 다음과 같은 문맥에서 허용됩니다.

Ref 커서

명시적 커서

다음의 경우에는 허용되지 않습니다.

묵시적 커서

 

예: Ref 커서에서의 커서 서브 쿼리)

    DECLARE

        TYPE refcursortype IS REF CURSOR;

        n NUMBER;

        emprow employees%rowtype;

        empcur1 refcursortype;

        empcur2 refcursortype;

 

    BEGIN

        OPEN empcur1 FOR

            SELECT cursor(SELECT *

                              FROM   employees e

                              WHERE  d.deptno = e.deptno ), d.deptno

            FROM departments d;

        LOOP

            FETCH empcur1 INTO empcur2, n;

            LOOP

                FETCH empcur2 INTO emprow;

                …

            END LOOP;

        END LOOP;

        ...

    END;

 

예: 명시적 커서에 대한 커서 서브 쿼리)

    DECLARE

        TYPE refcursortype IS REF CURSOR;

        n NUMBER;

        emprow employees%rowtype;

        empcur1 refcursortype;

 

        CURSOR c1 is

            SELECT CURSOR ( SELECT *

                               FROM employees e

                                WHERE d.deptno = e.deptno ), d.deptno

            FROM departments d;

 

    BEGIN

        OPEN c1;

        LOOP        

            FETCH c1 INTO empcur1, n;

            ...

            LOOP

                FETCH empcur1 INTO emprow;

                  …

            END LOOP;

        END LOOP;

        ...

    END;

 

Posted by 농부지기
,