[오라클 PL/SQL] PL/SQL 커서(Cursor)란?
- Database(데이터베이스)/Oracle
- 2019. 12. 2. 01:00
안녕하세요.
오늘은 오라클 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; |
위의 PL/SQL을 작성하고 실행을 시켜 보았습니다.
참고로, 위에서 SQL%ROWCOUNT라는 부분이 바로 커서 속성을 사용하여 해당 SQL 문으로 인해 실제 처리된 데이터 결과 로우 수를 보여주고 있습니다.
실행 결과
위 처럼, 총 8개의 ROW가 UPDATE 되었고, STUDENT 테이블에서 SCHOOL_NO가 “1”인 학생들의 GRADE가 모두 “3”으로 생신 된 모습을 확인하실 수 있습니다.
묵시적 커서 속성 정리
속성명 |
설명 |
SQL%FOUND |
결과 집합의 패치 로우 수가 1개 이상이면 TRUE, 아니면 FALSE 반환 |
SQL%NOTFOUND |
결과 집합의 패치 로우 수가 0이면 TRUE, 아니면 FALSE 반환 |
SQL%ROWCOUNT |
영향 받은 결과 집합의 로우 수 반환, 없으면 0을 반환 |
SQL%SOPEN |
묵시적 커서는 항상 FALSE를 반환 |
이로써 묵시적 커서에 대해서 알아보았습니다.
다음 포스팅에서는 명시적 커서에 대해 알아보도록 하겠습니다.
감사합니다.^^
'Database(데이터베이스) > Oracle' 카테고리의 다른 글
[오라클 PL/SQL] PL/SQL 커서(Cursor) FOR문으로 생성하기 (0) | 2019.12.04 |
---|---|
[오라클 PL/SQL] PL/SQL 명시적 커서(Cursor) 사용 방법 (0) | 2019.12.03 |
[오라클 PL/SQL] PL/SQL 예외처리 SQLCODE, SQLERRM 이용하여 예외 처리 하기 (0) | 2019.12.01 |
[오라클 PL/SQL] PL/SQL 예외처리 하는 방법 (0) | 2019.11.30 |
[오라클 PL/SQL] 프로시저 RETURN 문 사용하기 (0) | 2019.11.29 |
이 글을 공유하기