커서(cursor)란?
커서는 DML(Select Update) 구문을 위한 메모리에 대한 핸들(이름 또는 포인터) 이다.
A cursor is a handle (pointer) in memory for a DML operation (Select Update).
기본적으로 sql구문을 실행하는 오라클에 의해 할당된 지역이다. 오라클은 Single row query는 암시적 커서(Implicit)를 사용하고, Multiple row query는 명시적커서(explicit)를 사용한다.
그리고 각 커서는 속성을 갖는데, 4가지가 있다.
%FOUND : 가장 최근의 FETCH가 행을 리턴하는지 판단. Boolean 타입
%ISOPEN : 커서가 열렸는지 판단함. Boolean 타입
%NOTFOUND : 가장 최근의 FETCH가 행을 리턴하지 않는지 판단. Boolean 타입
%ROWCOUNT : 리턴되는 행의 갯수가 얼마인지 판단. Number타입
암시적 커서
SQL> VARIABLE rows_deleted VARCHAR2(30)
SQL>
DECLARE
empno employees.employee_id%TYPE := 176;
BEGIN
DELETE FROM employees
WHERE employee_id = empno;
:rows_deleted := (SQL%ROWCOUNT ||' row deleted.');
END;
/
SQL> PRINT rows_deleted
명시적 커서
DECLARE
CURSOR emp_cursor is
select * from emp
order by sal desc;
emp_rec emp_cursor%rowtype;
BEGIN
if emp_cursor%isopen = false then
OPEN emp_cursor;
end if;
LOOP
FETCH emp_cursor INTO emp_rec;
exit when emp_cursor%notfound or emp_cursor%rowcount > 3;
dbms_output.put_line(emp_rec.ename||' '||emp_rec.sal);
END LOOP;
CLOSE emp_cursor;
END;
/
DECLARE
CURSOR emp_cursor IS
select * from emp
order by sal desc;
BEGIN
for emp_rec in emp_cursor loop
exit when emp_cursor%notfound or emp_cursor%rowcount > 3;
dbms_output.put_line(emp_rec.ename||' '||emp_rec.sal);
end loop;
END;
/
'Oracle > PL_SQL' 카테고리의 다른 글
테이블 변경시 관련 procedure, function, package 확인 (0) | 2009.11.16 |
---|---|
wrap pld (0) | 2009.11.16 |
Exception handling (0) | 2009.11.13 |
PLS_INTEGER (1) | 2009.11.12 |
Bind Variables(Host Variable) (0) | 2009.11.12 |