Oracle/PL_SQL2009. 11. 12. 22:36

커서(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
Posted by 자수성가한 부자