Cursor(DB,Oracle)

Soozoo·2024년 7월 10일

데이터베이스(DB)

목록 보기
16/19

PL/SQL Cursor에 대한 이해와 활용

1. Cursor의 개념

Cursor는 SQL 쿼리의 실행 결과를 임시로 저장하고, 이를 반복적으로 접근하여 개별적으로 처리할 수 있는 PL/SQL의 기능입니다. 주로 다음과 같은 상황에서 사용됩니다:

  • 결과 집합에서 데이터를 순회하며 특정 조건에 따라 처리할 때.
  • 복잡한 연산을 수행하기 전에 데이터를 일시적으로 저장하고 접근할 때.
  • 여러 행을 반복적으로 처리해야 할 때.

2. Cursor 사용법

Cursor를 사용하기 위해서는 다음과 같은 단계가 필요합니다:

  • Cursor 선언
  • Cursor 열기 (Open)
  • 반복문을 사용한 데이터 조회 (Fetch)
  • 데이터 처리 및 필요한 작업 수행
  • Cursor 닫기 (Close)

아래는 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;
/

3. Cursor의 주요 구성 요소

  • DECLARE CURSOR: SQL 쿼리를 사용하여 Cursor를 선언합니다. Cursor는 특정 결과 집합을 정의하는 SELECT 문을 포함합니다.
  • OPEN: Cursor를 열어서 첫 번째 결과 행을 가져옵니다. 이 과정에서 데이터베이스와 연결됩니다.
  • FETCH: Cursor에서 한 번에 한 행씩 데이터를 가져옵니다. 반복문을 통해 이 과정을 반복하여 데이터를 처리합니다.
  • CLOSE: Cursor를 닫아서 리소스를 해제합니다. 모든 작업이 완료된 후에는 반드시 Cursor를 닫아야 합니다.

4. Cursor 예제: 부서별 직원 목록 출력

다음은 부서별 직원 목록을 출력하는 예제입니다.

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;
profile
넙-죽

0개의 댓글