[오라클 PL/SQL] PL/SQL 커서(Cursor)란?


안녕하세요.

 

오늘은 오라클 PL/SQL에서 커서에 대해서 알아보려고 합니다.

 

커서란?


-     커서란 특정 SQL 문장을 처리한 결과를 담고 있는 영역을 가리키는 일종의 포인터 입니다. 커서를 사용하면 처리된 SQL 문장의 결과 집합에 접근할 수 있습니다.

 

커서는 크게 두가지 종류가 있습니다. 묵시적 커서와, 명시적 커서가 있는데 오늘은 그 중에서도 묵시적 커서에 대해서 알아 보려고 합니다.

 

명시적 커서는 다음에 포스팅을 바로 올리도록 하겠습니다.

 

묵시적 커서란?


-     묵시적 커서란 오라클 내부에서 자동으로 생성되어 사용하는 커서로, PL/SQL 블록에서 실행하는 SQL 문장 (INSERT, UPDATE, MERGE, DELETE, SELECT INTO) 이 실행될 때마다 자동으로 만들어져 사용됩니다.

 

커서는 크게 3 단계로 진행됩니다.

커서 열기(Open) – 패치(Fetch) – 커서 닫기(Close)” 이렇게 진행 됩니다.

 

사실, 모든 SQL 문장이 실행됨과 동시에 내부적으로 묵시적 커서가 자동으로 만들어져 사용됩니다. 개발자 입장에서는 묵시적 커서가 어떻게 사용되는지 관여하지 않아도 되고, 몰라도 되지만..묵시적 커서 속성을 사용하여 몇 가지 정보를 참조 할 수 있는데, 예제를 통하여 묵시적 커서 속성에 대해서 알아 보도록 하겠습니다.


 

아래 STUDENT 테이블이 있습니다.



위에서 현재 SCHOOL_NO“1”인 학생 수는 총 8명 입니다.

 

위의 SCHOOL_NO“1”인 학생들의 정보를 UPDATE 하는 익명 블록을 실행해 보도록 하겠습니다.

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

 

DECLARE

    vn_school_no WIN.STUDENT.SCHOOL_NO%TYPE := '1';

BEGIN

    --"SCHOOL_NO" "1" 학생들 모두  Grade "3"으로 갱신

    UPDATE WIN.STUDENT stu

        SET stu.GRADE = '3'

    WHERE 1 = 1

        AND stu.SCHOOL_NO = vn_school_no;

        

   -- 건의 데이터가 UPDATE 되었는지 출력

   DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);

   

   COMMIT;

        

END;

Colored by Color Scripter

cs

 

위의 PL/SQL을 작성하고 실행을 시켜 보았습니다.

 

참고로, 위에서 SQL%ROWCOUNT라는 부분이 바로 커서 속성을 사용하여 해당 SQL 문으로 인해 실제 처리된 데이터 결과 로우 수를 보여주고 있습니다.

 

실행 결과



위 처럼, 8개의 ROWUPDATE 되었고, STUDENT 테이블에서 SCHOOL_NO“1”인 학생들의 GRADE가 모두 “3”으로 생신 된 모습을 확인하실 수 있습니다.


묵시적 커서 속성 정리


속성명

설명

SQL%FOUND

결과 집합의 패치 로우 수가 1개 이상이면 TRUE, 아니면 FALSE 반환

SQL%NOTFOUND

결과 집합의 패치 로우 수가 0이면 TRUE, 아니면 FALSE 반환

SQL%ROWCOUNT

영향 받은 결과 집합의 로우 수 반환, 없으면 0을 반환

SQL%SOPEN

묵시적 커서는 항상 FALSE를 반환

 

이로써 묵시적 커서에 대해서 알아보았습니다.

 

다음 포스팅에서는 명시적 커서에 대해 알아보도록 하겠습니다.


감사합니다.^^


728x90

이 글을 공유하기

댓글

Designed by JB FACTORY