본문 바로가기

Windows Developer/Oracle

[Oracle] 명시적 커서와 암시적 커서


커서는 PL/SQL에 내장된 일종의 포인터이며, 데이터베이스 쿼리와 레코드들의 세트를 얻는 작업, 그리고 결과셋의 행들을 하나씩 얻는 작업에 이용될 수 있다. 즉, 커서는 데이터에 대한 프로그래밍적인 접근을 가능하게 해준다.


[명시적 커서]

명시적 커서는 커서를 관리하는데 필요한 PL/SQL코드를 PL/SQL 프로그래머가 직접 작성하는 커서이다.

declare
vempno number(4);
vename varchar2(20);
vsal number(7, 2);
cursor c1 is
select empno, ename, sal
from emp
where deptno = 20;
begin
open c1;
dbms_output.put_line('empno ename slal');
loop
fetch c1 into vempno, vename, vsal;
exit when c1%notfound;
dbms_output.put_line(to_char(vempno)||' '||vename||' '||to_char(vsal));
end loop;
close c1;
end;




1) 커서를 선언한다 
cursor c1 is
2) 커서를 오픈한다.
open c1;
3)커서에 조회한 결과를 인출해 지정한다.
fetch c1
4)커서를 닫는다.
close c1;



[암시적 커서]

암시적 커서는 커서를 처리하는 코드를 직접 작성할 필요가 없다. 암시적 커서를 이용할 때 역시 레코드를 이용한 작업이 가능하지만 커서의 라이프 사이클을 관리하는 코드를 직접 작성하지 않아도 된다.

declare
begin
for my_dept_rec in (select department_id, department_name
from departments order by 1)
loop
dbms_output.put('Department : ' || my_dept_rec.department_id);
dbms_output.put_line(' is named '|| my_dept_rec.department_name);
end loop;
end;



%FOUND : PL/SQL 코드가 마지막으로 얻은 커서의 결과셋에 레코드가 있었는지를 나타낸다.
%NOTFOUND : PL/SQL 코드가 마지막으로 얻은 커서의 결과셋에 레코드가 없었는지를 나타낸다.
%ROWCOUNT : 현재 시점에서 커서에서 얻은 레코드의 수를 리턴한다.
%ISOPEN : 커서가 열렸으면, 아직 닫히지 않은 상태이면 TRUE를 리턴한다.


'Windows Developer > Oracle' 카테고리의 다른 글

[Oracle] 인덱스의 구조  (0) 2011.01.08
[Oracle] 인덱스 란?  (0) 2011.01.08
[Oracle] OUTER JOIN  (1) 2011.01.07
[Oracle] NON-EQUJOIN  (0) 2011.01.07
[Oracle] EquJoin  (0) 2011.01.07