# 문제: 사원 번호가 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

+ Recent posts