DB/Oracle

Oracle Cursor 란 ?

서견 2024. 9. 19. 21:05

 

Oracle Cursor

Oracle Cursor 란 ?

  • 오라클 서버에서는 SQL문을 실행할 때마다 처리를 위한 메모리 공간을 사용함.
  • 커서를 사용하면 사용자가 요청하는 데이터를 DB 버퍼 캐시에서 커서로 복사해 온 후 커서에서 원하는 데이터를 추출하여 후속 작업이 가능 함.
  • 짧게 , SQL문을 처리한 결과 집합을 가리키는 포인터 라고 생각할 수 있다.

Cursor의 종류

  1. Implicit Cursor(암시적 커서):
  2. Explicit Cursor(명시적 커서):

Explicit Cursor(명시적 커서) 사용법

명시적 커서를 사용할 때는 네 단계를 거침:

  1. 커서 선언: 커서에 사용할 SQL 쿼리를 정의.
  2. 커서 열기(OPEN): 커서를 열고 SQL 쿼리를 실행.
  3. 데이터 가져오기(FETCH): 커서에서 데이터를 한 행씩 가져옴.
  4. 커서 닫기(CLOSE): 커서를 닫아 자원을 반환.

예시: 명시적 커서 사용하기

DECLARE
  CURSOR emp_cursor IS
    SELECT emp_id, emp_name FROM employees WHERE department_id = 10;

  v_emp_id employees.emp_id%TYPE;
  v_emp_name employees.emp_name%TYPE;

BEGIN
  -- 1. 커서 열기
  OPEN emp_cursor;

  -- 2. 커서에서 한 행씩 데이터 가져오기
  LOOP
    FETCH emp_cursor INTO v_emp_id, v_emp_name;
    EXIT WHEN emp_cursor%NOTFOUND;  -- 더 이상 데이터가 없으면 루프 종료

    -- 가져온 데이터를 출력
    DBMS_OUTPUT.PUT_LINE('Employee ID: ' || v_emp_id || ', Name: ' || v_emp_name);
  END LOOP;

  -- 3. 커서 닫기
  CLOSE emp_cursor;
END;​

단계별 설명:

  • 커서 선언: CURSOR emp_cursor IS로 emp_cursor라는 커서를 선언하고, SELECT 문을 정의.
  • 커서 열기: OPEN emp_cursor;로 커서를 열어 데이터를 가져올 준비를 함.
  • 데이터 가져오기: FETCH emp_cursor INTO v_emp_id, v_emp_name;로 커서에서 한 행씩 데이터를 가져옴. 반복문(LOOP)과 함께 사용되어 여러 행을 처리
  • 커서 닫기: CLOSE emp_cursor;로 커서를 닫아 자원을 반환.

커서 FOR 루프

명시적 커서를 사용할 때 FOR 루프를 사용하면 커서를 자동으로 열고 닫으며, 반복문을 통해 데이터를 자동으로 가져올 수 있음. 즉, OPEN, FETCH, CLOSE 작업을 자동으로 처리함.

예시: 커서 FOR 루프 사용하기

 

BEGIN
  FOR emp_record IN (SELECT emp_id, emp_name FROM employees WHERE department_id = 10) LOOP
    DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp_record.emp_id || ', Name: ' || emp_record.emp_name);
  END LOOP;
END;
  • FOR ... IN 구문은 커서를 자동으로 열고 닫아 줌.
  • 각 행의 데이터를 emp_record라는 레코드 변수에 저장하여 처리함.

'DB > Oracle' 카테고리의 다른 글

Oracle DBLink 란?  (0) 2024.09.19