【雪野实训记录】Oracle数据库 T8作业——触发器

题目:

一、

emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno部门编号)

dept部门表(deptno部门编号/dname部门名称/loc地点)

1.     禁止员工在休息日改变雇员信息

2.     限制员工的工资不能超过当前的最高工资

3.     设置员工的工资不能低于原工资,但也不能高出原工资的20%

解析:


--1.禁止员工在休息日改变雇员信息

create or replace trigger tr_sec_emp
before insert or update or delete on emp  
begin  
if to_char(sysdate,'DAY','nls_date_language=AMERICAN')in('SAT','SUN')
then case  
when inserting then  raise_application_error(-20001,'不能在休息日增加雇员信息!');  
when updating then  raise_application_error(-20002,'不能在休息日修改雇员信息!');  
when deleting then  raise_application_error(-20003,'不能在休息日删除雇员信息!');
end case;end if;end;


--2.限制员工的工资不能超过当前的最高工资

create or replace trigger tr_emp_salary before  
insert or update of sal on emp for each row  
declare  
maxSalary number(10,2);
begin  
select max(sal) into maxSalary from emp;
if :new.sal>maxSalary
then  
raise_application_error(-20010,'员工工资超出工资上限!');
end if; end;


--3.设置员工的工资不能低于原工资,但也不能高出原工资的20%
create or replace trigger tr_emp_say before update of sal on emp for each row
when (new.sal< old.sal or new.sal> old.sal*1.2)
begin  
raise_application_error(-20011,'员工不能降薪,但工资升幅不能超过20%!');  
end;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值