[DB ]pl/sql 문 문제 예제

1007 과제

 

입력받은 부서번호로 사원번호, 사원명, 연봉, 입사일을 조회하라

단, 보너스는 부서번호별로 차등 지급한다.(10 - 연봉의 10%, 20 - 20%, 30 - 15%)

커서로 뽑아온 값을 가지고 루프안에서 if로 계산하라

해당 부서가 없다면 '부서없음'을 출력하고 입력받은 부서번호가 있을 때에만 커서를 사용하여 출력하라.

부서번호가 입력되지 않으면 '부서번호 필수 입력'을 출력하라

 

 

accept deptno prompt '부서번호 : '

declare

i_deptno emp.deptno%type :=  nvl('&deptno',-1);  

cursor cur_emp is

select empno, ename, sal, hiredate

from emp

where deptno = i_deptno; 

 

empno emp.empno%type;

ename emp.ename%type;

sal emp.sal%type;

hiredate emp.hiredate%type;

begin

if i_deptno = -1 then

dbms_output.put_line('부서번호 필수 입력');

else

select deptno

into i_deptno

from dept

where deptno = i_deptno;

 

if cur_emp%isopen then

close cur_emp;

end if;

open cur_emp;

 

loop                                              

fetch cur_emp into empno, ename, sal, hiredate;

 

exit when(cur_emp%notfound);                                              

 

if i_deptno = 10 then

sal := sal+(sal*0.1);

elsif i_deptno = 20 then 

sal := sal+(sal*0.2);

elsif i_deptno = 30 then

sal := sal+(sal*0.15);

end if;                 

 

dbms_output.put_line('사원번호 : '|| empno || ', 사원명 : ' || ename || ', 연봉 : ' || sal || ', 입사일 : ' || hiredate);

end loop;

 

if cur_emp%rowcount = 0 then

dbms_output.put_line('해당 부서 번호의 사원 데이터가 없습니다.');

end if;

 

close cur_emp;

 

end if; 

 

exception 

when no_data_found then

dbms_output.put_line('부서 없음');

when others then

dbms_output.put_line('개발자가 인지하지 못한 에러입니다.');

end;

/