1. EMP 테이블의 SAL에 UPDATE가 발생하면 로그를 저장하는 EMP_UP_SAL_LOG 테이블과 트리거를 작성하시오. SAL에 UPDATE가 발생하면 트리거에 의해 EMP_UP_SAL_LOG 테이블 에 UPDATE가 발생한 날짜, SAL가 변경 된 사원의 이름, 변경 전 SAL의 값, 변경 후SAL의 값, 증감율 ((변경 후 SAL-변경 전 SAL) / 변경 전 SAL) 값을 저장한다. 2개 이상의UPDATE 문을 수행하여 EMP_UP_SAL_LOG의 내용을 보이시오.

 

 

create table emp_up_sal_log (
    updateat date,
    ename varchar(10),
    old_sal decimal(7,2),
    new_sal decimal(7,2),
    rate decimal(5,2)
);


delimiter $$

create trigger trg_emp_sal_update
after update on emp
for each row
begin
    if new.sal <> old.sal then
        insert into emp_up_sal_log (
            updateat,
            ename,
            old_sal,
            new_sal,
            rate
        ) values (
            sysdate(),
            new.ename,
            old.sal,
            new.sal,
            (new.sal - old.sal) / old.sal
        );
    end if;
end $$

delimiter ;

select *
from emp;


update emp set sal = sal + 500 where ename = 'SMITH';
update emp set sal = sal + 1000 where ename = 'ALLEN';


select * 
from emp_up_sal_log;

 

 

 

 

 

 

 

 

2. 커서를 사용하여 EMP 테이블에서 늦게 입사한 순서대로 5명의 사원 이름(ENAME)을 출 력하는 emp_DateRank 프로시저를 작성하고 호출한 결과를 작성하시오.

 

select *
from emp;

delimiter $$

create procedure emp_daterank()
begin
    declare done int default false;
    declare emp_name varchar(10);
    declare cur cursor for 
        select ename
        from emp
        order by hiredate desc
        limit 5;
    declare continue handler for not found set done = true;
    
    open cur;
    
    emp_loop: loop
        fetch cur into emp_name;
        if done then
            leave emp_loop;
        end if;
        select emp_name;
    end loop;
    
    close cur;
    
end $$

delimiter ;

call emp_daterank();

 

 

 

 

 

 

 

+ Recent posts