프로시저에 적용
- 부서 번호를 입력 받아 해당 부서 사원의
사원번호, 이름, 급여 출력하는 프로시저
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)
'Oracle > PL/SQL' 카테고리의 다른 글
15일차 # 7-25: CURRENT OF + FOR UPDATE cursor (0) | 2012.04.24 |
---|---|
15일차 # 7-23: SELECT ... FOR UPDATE (0) | 2012.04.24 |
15일차 # 7-21 추가: Cursor For Loop with Parameters (0) | 2012.04.24 |
15일차 # 7-21: Cursor with Parameters (0) | 2012.04.24 |
15일차 # 7-20: (Implicit) Cursor For Loop using Subquery (0) | 2012.04.24 |