커서(Cursor)란 ?

GonnabeAlright·2022년 3월 26일
0
post-thumbnail

커서란 ?

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

커서의 종류

  • 명시적(Explicit) 커서: 사용자가 선언해서 생성 후 사용하는 SQL 커서, 주로 여러 개의 행을 처리하고자 할 경우 사용.
  • 묵시적(Implicit) 커서: 오라클에서 자동으로 선언해주는 SQL 커서, 사용자는 생성 유무를 알 수 없다.

커서의 속성

커서를 open하고 나서 fetch가 발생하면 true값을 반환

  • %FOUND : 할당할 레코드가 있는 경우 true 값을 반환
  • %isOpen : 커서가 오픈 상태일 경우 true 값을 반환
  • %NotFound : 할당할 레코드가 없는 경우 true 값을 반환
  • %RowCount : 카운터 역할을 한다. 커서가 오픈됐을 경우 0, 패치가 발생할 때마다 1씩 증가한다.

커서의 처리단계(명시적 커서)

  1. 명시적 커서 선언 (Cursor [커서이름])
  2. 명시적 커서 오픈 (Open [커서이름])
  3. 커서에서 데이터 추출 (Fetch [커서이름])
  4. 커서 종료 (Close [커서이름])

사용 예시

DECLARE
	emp_id number(4);
    emp_name varchar2(10);
    emp_salary number(10);
    
CURSOR cul is
	SELECT empno, ename, sal
    FROM emptest1
    WHERE deptno = 30;
    
BEGIN
	OPEN CRL;
    dbms_output.put_line('사번		이름		급여');
    
    LOOP
    	FETCH cul INTO emp_id, emp_name, emp_salary;
        EXIT WHEN cul%NotFound;
        
        dbms_output.put_line(emp_id||' '||emp_name||' '||emp_salary);
        END LOOP;
        CLOSE cul;
        END;

묵시적 커서 사용

속성 사용 시 SQL%NotFound, SQL%RowCount, SQL%Found, SQL%isOpen과 같이 SQL을 넣어 사용한다.

사용 예시

DECLARE
	cnt1 number;
    cnt2 number;
    
BEGIM
	SELECT count(*) INTO cnt1
    FROM emp
    WHERE deptno = 30;
    
    cnt2 := sql%rowcount;
    
    dbms_output.put_line('cnt1의 값 : ' || cnt1);
    dbms_output.put_line('cnt2의 값 : ' || cnt2);
    end;

0개의 댓글