본문 바로가기
DataBase/Oracle

묵시적 커서(CURSOR)

by 글발 2023. 10. 31.
728x90
반응형

커서(CURSOR)

커서란 특정 SQL 문장을 처리한 결과를 담고 있는 일종의 포인터이다.(PRIVATE SQL이라는 메모리영역을 가리킴)

커서를 사용해서 처리된 SQL 문장의 결과 집합에 접근할 수 있다.

커서의 종류에는 묵시적 커서와 명시적 커서가 있는데

여기서 묵시적 커서에 대해서 간단하게 알아보고 다음 글에서 명시적 커서에 대해 알아볼 것이다.

묵시적 커서는 오라클 내부에서 자동으로 생성되어 사용하는 커서이다.

SQL이 실행될 때마다 자동으로 만들어진다.(INSERT, UPDATE MERGE, DELETE SELECT)

반면 명시적 커서는 사용자가 직접 정의해서 사용하는 커서이다.

명시적이든 묵시적이든 커서는 열기(open)-패치(fatch)-닫기(close) 3단계로 진행되고

명시적 커서의 경우 커서를 선언하는 부분이 앞에 추가된다.

묵시적 커서

모든 SQL 문장이 실행됨과 동시에 내부적으로 묵시적 커서가 만들어져 사용된다.

개발자 입장에서 묵시적 커서가 어떤식으로 어떻게 사용되어졌는지 관여할 필요도 없고

굳이 알 필요도 없지만

커서의 속성을 사용하면 묵시적 커서에 대해서 유용한 정보를 참조할 수 있다.

예를 들어서 INSERT, UPDATE, DELETE 문을 수행 했을 때 몇 건의 데이터가 영향을 받았는지 알 수 있다.

아래의 쿼리를 실행해보자.

DECLARE
    vn_department_id employees.department_id%TYPE := 80;
    
    BEGIN
    -- 80번 부서의 사원 이름을 자신의 이름으로 갱신
        UPDATE employees
           SET emp_name = emp_name
         WHERE department_id = vn_department_id;
         
        DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
        
        COMMIT;
    END;

실행하면 34라는 결과가 출력된다.

이것은 34건이 갱신되었다는 것을 알 수 있다.

SQL%ROWCOUNT라는 커서 속성을 사용해서 해당 SQL문으로 실제 처리된 겨로가 로우 수를 참조한 것이다.

SQL%ROWCOUNT에서 SQL은 커서 이름을 뜻하고 %ROWCOUNT가 커서 속성이다.

묵시적 커서의 정보를 참조할 때는 SQL로 시작되는 속성명을 사용해 참조할 수 있기 때문에 

묵시적 커서를 SQL 커서라고도 한다. 

묵시적 커서의 속성을 정리하면 다음과 같다.

속성명 설명
SQL%FOUND 결과 집합의 패치 로우 수가 1개 이상이면 TRUE,
아니면 FALSE를 반환
SQL%NOTFOUND 결과 집합의 패치 로우 수가 0이면 TRUE,
아니면 FALSE를 반환
SQL%ROWCOUNT 영향을 받은 결과 집합의 로우 수를 반환,
없으면 0을 반환
SQL%ISOPEN 묵시적 커서는 항상 FALSE를 반환
(이 속성으로 참조할 때는 이미 해당 묵시적 커서는 닫힌 상태)

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

패키지(Package)  (1) 2023.11.03
레코드(RECORD)  (1) 2023.11.01
CUBE  (0) 2023.10.31
ROLLUP  (0) 2023.10.30
WITH절  (1) 2023.10.16