쿼리문에 의해 반환되는 결과값들을 저장하는 메모리 공간에 대한 포인터
SQL
문을 처리한 결과 집합을 가리킨다.
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;
1. Implicit Cursor : 묵시적 커서
INSERT
, UPDATE
, DELETE
) 실행 시 자동 관리SQL%ROWCOUNT
: 영향 받은 결과 집합의 ROW 수 반환SQL%ISOPEN
: 묵시적 커서는 FALSE
반환SQL%FOUND
: 결과 집합의 FETCH
ROW 수가 1개 이상이면, TRUE
SQL%NOTFOUND
: 결과 집합의 FETCH
ROW 수가 0개면, TRUE
2. Explicit Cursor : 명시적 커서
LOOP
구조 내에서 이뤄짐커서 OPEN
, CLOSE
를 정확히 제어
커서 사용시 INDEX
활용 및 SQL 튜닝 수행
BULK COLLECT
사용
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;
[참고자료]