PL SQL

PL/SQL 명시적 커서, 암시적 커서 (Implicit Cursor, Explicit Cursor) - 1

n.han 2016. 7. 6. 10:33

 

 

[CURSOR]

 

- 정의

SQL 커서는 Oracle 서버에서 할당한 전용 메모리 영역에 대한 포인터이다. 커서는 SELECT 문의 결과 집합을 처리하는데 사용된다.

- 종류

1) 암시적 커서

Oracle 서버에서 SQL문을 처리하기 위해 내부적으로 생성하고 관리한다. SQL 커서 속성을 사용하면 SQL문의 결과를 테스트할 수 있다. 다음 표는 SQL 커서 속성을 나타낸 표이다.

 

SQL 속성

설명

SQL%FOUND

가장 최근의 SQL문이 한 행 이상에 영향을
미친 경우 TRUE로 평가되는 부울 속성

SQL%NOTFOUND

가장 최근의 SQL문이 한 행에도 영향을
미치지 않은 경우 TRUE로 평가되는 부울 속성

SQL%ROWCOUNT

가장 최근의 SQL문에 의해 영향을
받은 행 수를 나타내는 정수 값

  

2) 명시적 커서

프로그래머가 명시적으로 선언한다. DECLARE를 통해서 명명된 SQL 영역을 생성하고, OPEN을 이용하여 결과 행 집합을 식별하여, FETCH를 통해서 현재 행을 변수에 로드하며 (이를 현재 행이 없을 때까지 수행할 수 있다), CLOSE를 통해서 결과 행 집합을 해제한다.다음 예제는 명시적 커서를 기본적인 방법으로 구현한 것이다. 먼저 검색된   여러 행들을 받아오는 CURSOR를 선언했다. 그리고 해당 커서를 OPEN했으며, LOOP를 활용하여 FETCH - INTO를 간편하게 수행한 모습을 볼 수 있다. LOOP를 탈출하기 위해 %NOTFOUND를 이용하여 EXIT 조건을 서술하였으며, 사용한 명시적 커서를 CLOSE하였다.

 

DECLARE
  CURSOR emp_cur
  IS
    SELECT * FROM emp WHERE deptno = 10 ;
  emp_rec emp%ROWTYPE ;
BEGIN
  OPEN emp_cur ;
  LOOP
    FETCH emp_cur INTO emp_rec ;
    EXIT
  WHEN emp_cur%NOTFOUND ;
    DBMS_OUTPUT.PUT_LINE ( emp_rec.empno || ' ' || emp_rec.ename ) ;
  END LOOP ;
  CLOSE emp_cur ;
END ;                                  

/