DATABASE/Oracle

[ORACLE] 커서(CURSOR) 종류, 생성, 사용

잇나우 2020. 2. 7. 23:32
반응형

SQL 문장을 처리한 결과를 가지고 있는 메모리를 영역을 가리키는 포인터이다. SQL문의 사용결과 행이 여러개 일때 커서를 사용하면 행에 순차적으로 접근이 가능하다. 커서의 종류는 2가지가 있으며 SQL문이 실행될때 자동으로 생성되고 실행되는 암시적 커서와 사용자가 직접 정의해서 사용하는 명시적 커서가 있다.

커서의 종류

1. 암시적 커서

오라클에서 실행되는 모든 SQL문장은 암시적 커서가 생성된다. SQL문이 실행되는 순간 자동으로 실행된다.

암시적 커서 속성

  • SQL%FOUND : 해당 SQL문에 의해 반환된 행수가 1개 이상이면 TRUE
  • SQL%NOTFOUND : 해당 SQL문에 의해 반환된 행수가 더이상 없을 경우 TRUE
  • SQL%ISOPEN : PL/SQL에서는 FALSE 값을 가지고 있다. (암시적 커서가 열려있는지에 대한 여부)
  • SQL%ROWCOUNT : SQL문에 의해 반환된 총 행수, 영향을 받은 행의 갯수

2. 명시적 커서

사용자가 직접 정의해서 사용하는 이름이 있는 커서

명시적 커서 속성

  • %FOUND : FETCH한 데이터가 행을 반환하면 TRUE
  • %NOTFOUND : FETCH한 데이터가 행을 반환하지 않으면 TRUE (LOOP를 끝낼때 사용)
  • %ISOPEN : 커서가 OPEN되어 있으면 TRUE
  • %ROWCOUNT : 현재까지 반환된 총 행수

커서 생성

DECLARE
    CURSOR 커서명
    IS
    SELECT 출력할컬럼 FROM 테이블명;
BEGIN

END;

DECLARE 영역안에 커서를 선언하고 가리키고 싶은 테이블을 SELECT한다.

커서 사용

-- LOOP문
DECLARE
    CURSOR 커서명
    IS
    SELECT 출력할컬럼 FROM 테이블명;
BEGIN
    OPEN 커서명
        FETCH 커서명 INTO 변수
        EXIT WHEN 커서명%NOTFOUND;
        END LOOP;
    CLOSE 커서명;
END;

-- FOR문
DECLARE
    CURSOR 커서명
    IS
    SELECT 출력할컬럼 FROM 테이블명;
BEGIN
    FOR 변수 IN 커서명 LOOP

    EXIT WHEN 커서명%NOTFOUND;
    END LOOP;
END;

LOOP문을 사용할때는 커서의 OPEN과 CLOSE를 반드시 해줘야한다. 하지만 FOR문에서는 자동으로 OPEN과 CLOSE, 행이 없을때까지 FETCH를 해주기 때문에 따로 기입하지 않아도 된다.

반응형