커서(cursor)
declare --커서를 쓴다면 선언할 변수가 없어도 써줘야한다.
vname members.name%type;
vsalary members.salary%type;
vdepart members.depart%type;
cursor sel_cursor is -- 해당 결과값이 커서에 담김
select name,salary,depart from members
where salary >=1000;
begin
open sel_cursor; --호출
loop
fetch sel_cursor into vname,vsalary,vdepart
exit when sel_cusor%NOTFOUND; --없으면 나가라
dbms_output.put_line(vname||','||vsalary||','||vdepart);
end loop;
close sel_cursor; --종료
end;
loop,for~loop과 cursor를 통한 데이터 출력.
declare
vno book.no%type;
vtitle book.title%type;
vpublisher book.publisher%type;
cursor book_cursor is
select no,title,publisher from book;
begin
open book_cursor;
loop
fetch book_cursor into vno,vtitle,vpublisher;
exit when book_cursor%notfound;
dbms_output.put_line(vno||','||vtitle||','||vpublisher);
end loop;
close book_cursor;
end;
/
declare
bone book%rowtype;
cursor book_cursor is
select no,title,publisher from book;
begin
for bone in book_cursor loop
exit when book_cursor%notfound;
dbms_output.put_line(bone.no||','||bone.title||','||bone.publisher);
end loop;
end;
예외처리
others:모든 예외 처리
no_data_found:발견된 레코드가 없을 때
too_many_rows:2줄 이상의 레코드가 조회됐을 때
declare
i number;
begin
i:=6/4;
dbms_output.put_line('i:'||i);
exception when others then --others:모든 오류
dbms_output.put_line('오류 발생');
end;
/ 조건마다 다르게 출력
declare
vno book.no%type;
vtitle book.title%type;
begin
select no,title
into vno,vtitle
from book
where title like '%가%';
dbms_output.put_line(vno||','||vtitle);
exception
when no_data_found then
dbms_output.put_line('조건에 맞는 레코드가 없습니다.');
when too_many_rows then
dbms_output.put_line('두 줄 이상의 레코드가 있습니다.');
end;
'Develop > Oracle SQL DATABASE' 카테고리의 다른 글
0616 Oracle SQL 5일차 (0) | 2022.06.20 |
---|---|
0615 Oracle SQL 4일차~ (0) | 2022.06.15 |
0614 Oracle SQL 3일차! (0) | 2022.06.15 |
0613 Oracle SQL 2일차 (0) | 2022.06.15 |
0610 Oracle SQL DATABASE 첫 수업 (0) | 2022.06.10 |