DECLARE DT VARCHAR2(8); LVL INT; CURSOR DT_CUR IS SELECT DT AS DT , LEVEL - 1 LVL FROM DUAL CONNECT BY LEVEL <= 7; BEGIN OPEN DT_CUR; LOOP FETCH DT_CUR INTO DT, LVL; EXIT WHEN DT_CUR %NOTFOUND; .......(실행내용) END LOOP; CLOSE DT_CUR; END; DECLARE CURSOR DT_CUR1 IS SELECT TO_CHAR(TO_DATE('20220215', 'YYYYMMDD') + LEVEL - 1, 'YYYYMMDD') AS DT , LEVEL - 1 LVL FROM DUAL CONNECT BY LEVEL <= 7; BEGIN OPEN DT_CUR1; LOOP FETCH DT_CUR1 INTO DT, LVL; EXIT WHEN DT_CUR1 %NOTFOUND; ......(실행내용) END LOOP; CLOSE DT_CUR1; END;
이렇게 하고 싶습니다.
이유는 첫번째 커서에서 테이블에 저장을 하고, 두번째 커서에서는 첫번째 커서에서 저장한 테이블을 불러서 처리할 작업이 있어서 그렇습니다.
어떻게 해야 커서를 연속으로 사용할 수 있을까요?
PL/SQL 의 불럭 구조를 정확하게 이해하지 못하고 계신 듯 하네요.
지금 작성하신 것은 두개의 블럭이 별개로 실행되는 형태입니다.
(블럭1)(블럭2)
1안) 하나의 블럭 안에서 두개 처리를 실행하는 방안이 있고
2안) 하나의 메인 블럭을 사용하는 방안도 있습니다.
(메인블럭0 (서브블럭1) (서브블럭2) )
지난번 글에 달았던 참조 링크 다시 한번 달아 드립니다.
http://gurubee.net/lecture/1342 -- PL/SQL Block 의 구조
http://gurubee.net/oracle/plsql -- Oracle PL/SQL 강좌
-- 현행 : 개별 블럭 -- DECLARE CURSOR dt_cur IS ...; BEGIN -- 처리1 -- END; / DECLARE CURSOR dt_cur1 IS ...; BEGIN -- 처리2 -- END; /
-- 개선 1안 : 단일 블럭 -- DECLARE CURSOR dt_cur IS ...; CURSOR dt_cur1 IS ...; BEGIN -- 처리1 -- -- 처리2 -- END; /
-- 개선 2안 : 서브 블럭-- BEGIN DECLARE CURSOR dt_cur IS ...; BEGIN -- 처리1 -- END; DECLARE CURSOR dt_cur1 IS ...; BEGIN -- 처리2 -- END; END; /