프로시저에 적용


- 부서 번호를 입력 받아 해당 부서 사원의 

 사원번호, 이름, 급여 출력하는 프로시저



    1) Subprogram + Cursor For Loop with Parameters


create or replace procedure list_emp(a number)

is

 cursor emp_cur (dno number) is

   select * from emp

   where deptno = dno

   order by sal desc;

begin

 for r in emp_cur(a) loop

   p(r.empno||' '||r.ename||' '||r.sal);       

 end loop;

end;

/



exec list_emp(10)

exec list_emp(30)

exec list_emp(90)


   ------------------------------


    2) Subprogram + Cursor For Loop with Parameters + 없는 값 조사

   

create or replace procedure list_emp(a number)

is

 cursor emp_cur (dno number) is

   select * from emp

   where deptno = dno

   order by sal desc;

 flag number := 0;


begin

 for r in emp_cur(a) loop

   p(r.empno||' '||r.ename||' '||r.sal);       

   flag := flag + 1;

 end loop;


 if flag = 0 then

   p('존재하지 않는 부서이옵니다, 주인님!');

 end if;

end;

/



exec list_emp(30)

exec list_emp(90)


   ------------------------------


    3) Subprogram + Cursor with Parameters + 없는 값 조사


create or replace procedure list_emp(a number)

is

 cursor emp_cur (dno number) is

   select * from emp

   where deptno = dno

   order by sal desc;

 r emp_cur%rowtype;

begin

 

 open emp_cur(a);


 loop

   fetch emp_cur into r;


   if emp_cur%notfound and emp_cur%rowcount=0 then

     p('존재하지 않는 부서이옵니다, 주인님!');

     exit;

   end if;


   exit when emp_cur%notfound;

   p(r.empno||' '||r.ename||' '||r.sal);      


 end loop;

end;

/


exec list_emp(30)

exec list_emp(90)


   ------------------------------


  4) 위와 동일한 결과가 나타나되 전혀 다른 방법으로 구현.

(Associative array, BULK COLLECT, Exception section)



create or replace procedure list_emp(a number)

is

 TYPE emp_table_type IS TABLE OF emp%rowtype

   INDEX BY PLS_INTEGER;

  

 r emp_table_type;

begin

 select * bulk collect into r

 from emp

 where deptno = a

 order by sal desc;


 for i in r.first .. r.last loop

   p(r(i).empno||' '||r(i).ename||' '||r(i).sal); 

 end loop;


exception

 when others then

   p('존재하지 않는 부서이옵니다, 주인님!');

end;

/



exec list_emp(30)

exec list_emp(90)



+ Recent posts