Jam's story
[Oracle]days15- cursor 본문
cursor
CURSOR란 PL/SQL 블럭 내에서 실행되는 SELECT 문을 의미한다.
select 문에서 여러개의 레코드를 처리하기위해서 커서를 사용해야한다.
커서에 select문의처리된 결과가 저장되어있는데, 그것을 하나씩 가져온댜.
implicit cursor (묵시적) |
일반적으로 사용된는 SQL문을 묵시적 커서라 한다. 한 번 실행에 하나의 결과를 반환하는 SQL문을 의미 함 |
explicit cursor (명시적) |
SQL문을 실행했을 때 그 결과가 여러 개인 경우에 묵시적 커서를 사용하면 해당 SQL문은 에러가 발생함 이유는 묵시적 커서에 사용되는 스칼라 변수는 한 번에 하나의 값만 저장할 수 있기 때문임이렇게 여러 개의 행이 반환되는 SQL문을 실행하는 경우에는 반드시 명시적 커서를 사용해야 함 |
명시적 커서
명시적 커서에서는 다음과 같은 구성으로 이루어진다.
CURSOR 선언 ⇒ OPEN ⇒ FETCH ⇒ CLOSE
명시적커서
1)커서선언
2)커서 OPEN
3)LOOP
--처리 FETCH 가져오다.
EXIT WHEN 커서가 읽을 것이 없을 때 까지
END LOOP
커서 CLOSE
커서선언
CURSOR [커서명]
IS
[SELECT절];
OPEN [커서명];
FOR
FETCH [커서명] INTO [변수명];
EXIT WHEN [조건절];
END LOOP;
CLOSE [커서명];
CURSOR [커서명]
IS
[SELECT절];
OPEN [커서명];
FOR
[record명] IN [커서명] LOOP
[처리부]
END LOOP;
empno를 입력해서 3명 가져오기
declare
vempno emp.empno%type;
vename emp.ename%type;
vsal emp.sal%type;
cursor emp_cursor is(
select empno, ename, vsal
from emp
where deptno= :pdeptno
);
begin
open emp_cursor;
loop
fetch emp_cursor into vempno, vename, vsal;
dbms_output.put_line(vempno ||','||vename||','||vsal);
exit when emp_cursor%notfound or emp_cursor%rowcount>=3;
end loop;
close emp_cursor;
end;
declare
type emptype is record
(
empno emp.empno%type
,ename emp.ename%type
,sal emp.sal%type
);
vrow emptype;
cursor emp_cursor is select empno, ename, sal from emp;
begin
open emp_cursor;
loop
fetch emp_cursor into vrow;
dbms_output.put_line(vrow.empno||','||vrow.ename||','||vrow.sal);
exit when emp_cursor%notfound;
end loop;
close emp_cursor;
end;
'Oracle' 카테고리의 다른 글
[Oracle] days17 -저장함수 (0) | 2022.04.26 |
---|---|
[Oracle] days15 -저장 프로시저 (0) | 2022.04.22 |
[Oracle] days 15- 설문조사 쿼리 데이터 넣어보기 (0) | 2022.04.22 |
[Oracle] days14 - pl/sql (0) | 2022.04.21 |
[Oracle ] days14- 시퀀스 (0) | 2022.04.21 |
Comments