Cursor는 SQL 쿼리의 실행 결과를 임시로 저장하고, 이를 반복적으로 접근하여 개별적으로 처리할 수 있는 PL/SQL의 기능입니다. 주로 다음과 같은 상황에서 사용됩니다:
Cursor를 사용하기 위해서는 다음과 같은 단계가 필요합니다:
아래는 Cursor를 사용하여 데이터를 조회하고 처리하는 기본적인 예제입니다.
CREATE OR REPLACE PROCEDURE process_employee_salary IS
CURSOR c_employee IS
SELECT empno, ename, sal FROM emp;
v_empno emp.empno%TYPE;
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
OPEN c_employee;
LOOP
FETCH c_employee INTO v_empno, v_ename, v_sal;
EXIT WHEN c_employee%NOTFOUND;
-- 여기에 데이터 처리 로직 추가
DBMS_OUTPUT.PUT_LINE('Employee ' || v_ename || ' has salary ' || v_sal);
END LOOP;
CLOSE c_employee;
END;
/
다음은 부서별 직원 목록을 출력하는 예제입니다.
CREATE OR REPLACE PROCEDURE list_employees_by_department IS
CURSOR c_employees IS
SELECT deptno, ename FROM emp ORDER BY deptno;
v_deptno emp.deptno%TYPE;
v_ename emp.ename%TYPE;
BEGIN
OPEN c_employees;
DBMS_OUTPUT.PUT_LINE('=============================');
LOOP
FETCH c_employees INTO v_deptno, v_ename;
EXIT WHEN c_employees%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('Dept ' || v_deptno || ': ' || v_ename);
END LOOP;
CLOSE c_employees;
END;