프로그래밍/ORACLE

[ORACLE] 반복문(CURSOR, FOR LOOP) 사용법

조쏘닉 2022. 1. 2. 22:23

운영업무를 하다보면 일괄로 반복적으로 처리해야하는 작업이 자주 발생하여 오라클에서 CURSOR, FOR LOOP문 사용법을 정리해 봅니다.

 

실제로 사용예제만 작성하였으며, 개념 및 내용은 출처를 통해 확인해보면 좋습니다.

 

1. CURSOR 예제

SET SERVEROUTPUT ON;

DECLARE
    CURSOR emp_cur -- 커서정의
    IS
    SELECT * FROM emp WHERE DEPTNO = 10;

    emp_rec emp%ROWTYPE; -- 변수정의
BEGIN
    OPEN emp_cur;
    
    LOOP -- 반복
    	FETCH emp_cur INTO emp_rec; -- 하나씩 변수에 넣기
    	EXIT WHEN emp_cur%NOTFOUND; -- 더이상 없으면 끝내기
        DMBS_OUTPUT.PUT_LINE(emp_rec.empno || ' ' || emp_rec.name); -- 출력
    END LOOP;
    
    CLOSE emp_cur;
END;
출처: https://goddaehee.tistory.com/117 [갓대희의 작은공간]
 

 

2. FOR LOOP 예제

DECLARE

    -- 사원 이름을 출력하기 위한 PL/SQL 테이블 선언 
    TYPE ename_table IS TABLE OF emp.ename%TYPE
    INDEX BY BINARY_INTEGER;
	
    -- 사원 급여를 출력하기 위한 PL/SQL 테이블 선언 
    TYPE sal_table IS TABLE OF emp.sal%TYPE
    INDEX BY BINARY_INTEGER;
	
    ename_tab    ename_table;
    sal_tab      sal_table;
	
    i BINARY_INTEGER := 0;

BEGIN

    DBMS_OUTPUT.ENABLE;
	
    FOR emp_list IN  (SELECT ename, sal 
	                  FROM emp 
	                  WHERE deptno = 10) LOOP
	
        i := i +1 ;
	
        -- 테이블에 상품 이름을 저장
        ename_tab(i) := emp_list.ename;
	        
        -- 테이블에 상품 가격을 저장 
        sal_tab(i)   := emp_list.sal;        
	
    END LOOP;
	
    --  화면에 출력
    FOR cnt IN  1..i   LOOP  
	
        DBMS_OUTPUT.PUT_LINE('사원이름 : ' || ename_tab(cnt)); 
        DBMS_OUTPUT.PUT_LINE('사원급여 : ' || sal_tab(cnt));
	
    END LOOP;

END;
/ 

사원이름 : CLARK
사원급여 : 2450
사원이름 : KING
사원급여 : 5000
사원이름 : MILLER
사원급여 : 1300

출처: http://www.gurubee.net/lecture/1056 [구루비]