Develop/Oracle SQL DATABASE

0620 Oracle SQL 7일차 기본 마무리

포페PostFace 2022. 6. 20. 17:21



커서(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