[이론] PL/SQL - CURSOR, 커서란?

조민수·2025년 3월 19일
0

개발 이론

목록 보기
17/18

CURSOR, 커서란?

  • 쿼리문에 의해 반환되는 결과값들을 저장하는 메모리 공간에 대한 포인터

  • SQL문을 처리한 결과 집합을 가리킨다.

    • 결과 집합은 Oracle 서버 프로세스 내부의 Private SQL Area 메모리 영역에 저장
    • Private SQL Area는 특정 쿼리에 대한 결과를 저장 및 캐싱

      즉, 같은 쿼리에 대한 반복적 호출
      → 자원 낭비 최소화

  • DB로부터 반환된 결과 집합을 순차적으로 접근할 때 사용

예시

DECLARE
	CURSOR 커서명 IS		-- 명시적 커서 선언
		SELECT 	COL_1, COL_2
    	FROM 	TABLE_A
    	WHERE	DEPTNO = '100'
	
    v_num NUMBER;
BEGIN
	OPEN 커서명		-- 명시적 커서 오픈
    ...
    FOR I IN 커서명 LOOP
    	v_num := I.COL_1 + I.COL_2;
    ...
END;

CURSOR 사용 이유

  1. 여러 행을 순차적으로 조회해 처리할 때
  2. ROW 단위 연산 수행 및 비즈니스 로직 적용
  3. 특정 연산에 대한 반복적 수행
  4. 복잡한 데이터 처리 연산을 PL/SQL 레벨에서 처리

CURSOR 종류

1. Implicit Cursor : 묵시적 커서

  • 오라클 내부에서 자동으로 생성되어 사용
  • PL/SQL 블록 내에서 실행하는 SQL 쿼리 실행 시,
    자동으로 생성
  • DML(INSERT, UPDATE, DELETE) 실행 시 자동 관리
    • SQL%ROWCOUNT : 영향 받은 결과 집합의 ROW 수 반환
    • SQL%ISOPEN : 묵시적 커서는 FALSE 반환
    • SQL%FOUND : 결과 집합의 FETCH ROW 수가 1개 이상이면, TRUE
    • SQL%NOTFOUND : 결과 집합의 FETCH ROW 수가 0개면, TRUE

2. Explicit Cursor : 명시적 커서

  • 사용자가 선언하여 사용하는 커서
  • 여러 행을 처리하고자 할 경우 사용
  • 커서의 사용은 4단계
    • 커서 선언 ▷ 커서 열기 ▷ 커서 사용 ▷ 커서 닫기
    • 커서 사용의 경우, 대게 LOOP 구조 내에서 이뤄짐

CURSOR 의 이점

  1. ROW 단위 데이터 처리 가능
  2. 복잡한 비즈니스 로직의 일부 단계 간단화
  3. 효율적 메모리 사용
  4. 데이터 처리 시 성능 최적화 가능
  5. 백엔드 단에서의 로직 감소

CURSOR의 성능 튜닝

  1. 커서 OPEN, CLOSE를 정확히 제어

  2. 커서 사용시 INDEX활용 및 SQL 튜닝 수행

  3. BULK COLLECT 사용

  • 커서를 사용할 때 데이터를 한 번에 여러 행을 메모리로 가져오는 방식
    • ROW 1개씩 가져오는 방식보다 성능이 뛰어남
  • 대량 데이터 처리 시, 성능을 크게 향상 가능
FETCH [커서명] BULK COLLECT INTO [컬렉션 변수명];
  • 사용 예시
    DECLARE
    	CURSOR emp_cur IS
      		SELECT EMP_ID FROM EMP;
    	TYPE emp_id_table IS TABLE OF EMP.EMP_ID%TYPE;
      	emp_ids emp_id_table; -- 컬렉션 선언
    BEGIN
    	OPEN emp_cur;
     	FETCH emp_cur BULK COLLECT INTO emp_ids;
      	CLOSE emp_cur;
          
      FOR I IN emp_ids.FIRST .. emp_ids.LAST LOOP
      	DBMS_OUTPUT.PUT_LINE(I);
       	-- 컬렉션 내 값들 출력
      END LOOP;
    END;
    • 컬렉션은 다음 포스트에

[참고자료]

profile
멈춤에 두려움을 느끼는 것

0개의 댓글

관련 채용 정보