JAVAIARY

커서(Cursor)란? 본문

lectureNote/SQL

커서(Cursor)란?

shiherlis 2023. 7. 12. 09:23

1. 커서(Cursor)

1) 개념

쿼리문의 처리 결과가 저장되어 있는 메모리 공간을 가리키는 포인터(Pointer)
ex) select * from 테이블 where 이름 = '나봉순'

ID 이름 성별 나이
01 나봉순 25

==> 쿼리문의 결과(특정 행들의 모음)를 저장하는 메모리공간을 가리킴

2) 종류

  • 묵시적 커서 : 내부에서 자동으로 생성되어 사용
  • 명시적 커서 : 사용자가 직접 정의해서 사용

3) 커서의 사용

  •  3 단계로 진행 ( 열기-Open, 패치-Fetch, 닫기-Close)
  • 묵시적 커서
    • 각 단계가 자동으로 수행
    • 수행된 쿼리문의 정상적인 수행 여부 확인을 위해 사용
  • 명시적 커서
    • 진행을 직접 구현해야 함
    • 쿼리문의 결과를 저장하여 사용함으로써 동일한 쿼리가 반복 수행되어 데이터베이스 자원 낭비를 방지

2. 묵시적 커서와 명시적 커서

1) 묵시적 커서(Implicit Cursor)

  • DBMS 자체적으로 open, fetch되어 사용이 끝나면 close됨
  • but, 커서 속성을 조회하여 사용된 쿼리 정보 열람 가능
SQL%FOUND 쿼리 수행의 결과로 패치된 튜플 수가 1개 이상이면 TRUE
SQL%NOTFOUND 쿼리 수행의 결과로 패치된 튜플 수가 0개이면 TRUE
SQL%ROWCOUNT 쿼리 수행의 결과로 패치된 튜플 수 반환
SQL%ISOPEN 커서가 OPEN 상태이면 TRUE
묵시적 커서는 자동 생성 후 자동으로 닫히기 때문에 항상 FALSE

2) 명시적 커서(Explicit Cursor)

  • 사용자가 직접 정의해서 사용하는 커서
  • 주로 절차형 SQL에서 SELECT문의 결과로 반환되는 여러 튜플들을 제어하기 위해 사용됨
  • 열기(OPEN)-패치(FETCH)-닫기(CLOSE)순으로 이루어지며, 
    명시적 커서로 사용하기 위해서는 OPEN전에 선언(DECLARE)해야 함
  • 선언(DECLARE) 형식
CURSOR 커서명(매개변수 1, 매개변수 2, ...)
IS
SELECT문;

 

  • 열기(OPEN) 형식
OPEN 커서명(매개변수 1, 매개변수 2, ...);

 

  • 패치(FETCH) 형식
    • 변수는 SELECT 문으로 가져온 데이터들과 자료형/크기가 같아야 함 
FETCH 커서명 INTO 변수 1, 변수 2...;

 

  • 닫기(CLOSE) 형식
CLOSE 커서명;

3. 예제

DECLARE
	p_name EMPLOYEE.NAME%TYPE
    CURSOR CUR_NAME(ff INT)
    IS
    SELECT name FROM employee WHERE id >= ff;
BEGIN
	OPEN cur_name(20);
    LOOP
    	FETCH cur_name INTO p_name;
        EXIT WHEN cur_name%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(p_name);
    END LOOP;
    CLOSE cur_name;
END;
  • 테이블명.속성명%TYPE : 해당 테이블의 해당 속성의 자료형

'lectureNote > SQL' 카테고리의 다른 글

PL/SQL) ORACLE 유저 생성/권한/삭제  (0) 2024.01.30
사용자 정의 함수  (0) 2023.07.09
트리거 (TRIGGER)  (0) 2023.07.05
프로시저 (PROCEDURE) 생성, 실행 , 삭제  (0) 2023.07.05
Oracle) NVL, UNION, OUTERJOIN표현식  (1) 2023.06.04