커서란 특정 SQL 문장을 처리한 결과를 담고 있는 영역을 가리키는 일종의 포인터입니다. 커서를 사용하면 처리된 SQL 문장의 결과 집합에 접근할 수 있습니다.
명시적(Explicit) 커서
: 사용자가 선언해서 생성 후 사용하는 SQL 커서, 주로 여러 개의 행을 처리하고자 할 경우 사용.묵시적(Implicit) 커서
: 오라클에서 자동으로 선언해주는 SQL 커서, 사용자는 생성 유무를 알 수 없다.
커서를 open하고 나서 fetch가 발생하면 true값을 반환
- %FOUND : 할당할 레코드가 있는 경우 true 값을 반환
- %isOpen : 커서가 오픈 상태일 경우 true 값을 반환
- %NotFound : 할당할 레코드가 없는 경우 true 값을 반환
- %RowCount : 카운터 역할을 한다. 커서가 오픈됐을 경우 0, 패치가 발생할 때마다 1씩 증가한다.
Cursor [커서이름]
)Open [커서이름]
)Fetch [커서이름]
)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;