Oracle Cursor
Oracle Cursor 란 ?
- 오라클 서버에서는 SQL문을 실행할 때마다 처리를 위한 메모리 공간을 사용함.
- 커서를 사용하면 사용자가 요청하는 데이터를 DB 버퍼 캐시에서 커서로 복사해 온 후 커서에서 원하는 데이터를 추출하여 후속 작업이 가능 함.
- 짧게 , SQL문을 처리한 결과 집합을 가리키는 포인터 라고 생각할 수 있다.
Cursor의 종류
- Implicit Cursor(암시적 커서):
- Explicit Cursor(명시적 커서):
Explicit Cursor(명시적 커서) 사용법
명시적 커서를 사용할 때는 네 단계를 거침:
- 커서 선언: 커서에 사용할 SQL 쿼리를 정의.
- 커서 열기(OPEN): 커서를 열고 SQL 쿼리를 실행.
- 데이터 가져오기(FETCH): 커서에서 데이터를 한 행씩 가져옴.
- 커서 닫기(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 |
---|