프로그래밍/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;
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 [구루비]