# 문제: 사원 번호가 7788인 사원의 사원번호와 관리자의 사원번호 및 상관의 이름을 출력하세요.
단, 관리자의 사원번호와 이름은 프로시저를 이용하여 구하세요.
해답:
create or replace procedure up_emp_manager (
p_worker_empno in emp.empno%type
, p_mgr_empno out emp.empno%type
, p_mgr_ename out emp.ename%type
)
is
begin
-- 방법 1: 서브쿼리를 이용
/* select empno, ename into p_mgr_empno, p_mgr_ename
from emp
where empno = (select mgr from emp
where empno = p_worker_empno); */
-- 방법 2: 조인 이용
select m.empno, m.ename into p_mgr_empno, p_mgr_ename
from emp w, emp m
where w.mgr = m.empno
and w.empno = p_worker_empno;
end;
/
declare
v_empno emp.empno%type;
v_ename emp.ename%type;
begin
up_emp_manager(p_worker_empno => 7788, p_mgr_empno => v_empno, p_mgr_ename => v_ename);
p('Worker Empno : '||7788);
p('Manager Empno : '||v_empno);
p('Manager Ename : '||v_ename);
end;
/
# 문제: 부서 번호를 입력받아 부서 이름, 해당 부서의 사원 수, 해당 부서 사원들의 총급여를
구하는 프로시저를 작성하세요. 그리고 바인드 변수를 사용하여 테스트 하세요.
해답:
create or replace procedure up_emp_calc (
p_deptno in dept.deptno%type
, p_dname out dept.dname%type
, p_emp_cnt out number
, p_sal_sum out number
)
is
begin
select d.dname, count(*), sum(e.sal) into p_dname, p_emp_cnt, p_sal_sum
from emp e, dept d
where e.deptno = d.deptno
and d.deptno = p_deptno
group by dname;
end;
/
var g_dname varchar2(30)
var g_emp_cnt number
var g_sal_sum number
exec up_emp_calc(10, :g_dname, :g_emp_cnt, :g_sal_sum)
exec up_emp_calc(20, :g_dname, :g_emp_cnt, :g_sal_sum)
exec up_emp_calc(30, :g_dname, :g_emp_cnt, :g_sal_sum)
'Oracle > PL/SQL' 카테고리의 다른 글
15일차 # 1-17 (0) | 2012.04.24 |
---|---|
15일차 # 1-16: DEFAULT (0) | 2012.04.24 |
15일차 # 1-13 (0) | 2012.04.24 |
15일차 # 1-11 (0) | 2012.04.24 |
15일차 # 1-10 (0) | 2012.04.24 |