[ 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;
'(DB) Oracle > PL.SQL' 카테고리의 다른 글
Oracle - Procedure BULK BIND(BULK COLLECT INTO문) (0) | 2017.01.21 |
---|---|
Oracle - Procedure 문법_FOR_SELECT문 (0) | 2017.01.21 |
Oracle - Procedure 문법_Cursor_For (0) | 2017.01.21 |
Oracle - Procedure 문법_Cursor_Fetch (0) | 2017.01.21 |
Oracle - Procedure 문법 Cursor_Dynamic Fetch (0) | 2017.01.21 |