Oracle 数据库 练习题 T8

来源:互联网 发布:二维动画软件大全 编辑:程序博客网 时间:2024/06/11 16:47

一、

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

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

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

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

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

emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno部门编号)dept部门表(deptno部门编号/dname部门名称/loc地点)1.禁止员工在休息日改变雇员信息CREATE OR REPLACE TRIGGER TRI_EMPBEFORE UPDATE OR DELETE OR INSERT ON EMPFOR EACH ROWBEGINIF(SYSDATE>(ROUND(sysdate,'day')+(INTERVAL '-1' DAY)) AND "SYSDATE"<(ROUND(sysdate,'day')+(INTERVAL '+1' DAY))) THENraise_application_error(-20000,'禁止修改雇员信息');ELSEdbms_output.put_line('雇员信息修改成功');END IF;END;SELECT ROUND(sysdate,'day')+(INTERVAL '+2' DAY)FROM DUAL;UPDATE EMPSET SAL=200WHERE EMPNO>7369;2.限制员工的工资不能超过当前的最高工资CREATE OR REPLACE PACKAGE P_MSAL ASMAXSAL NUMBER;END;CREATE OR REPLACE TRIGGER TRI_SALBEFORE UPDATE OF SAL ON EMPFOR EACH ROWBEGINSELECT "MAX"(SAL) INTO P_MSAL.MAXSALFROM EMP;END;CREATE OR REPLACE TRIGGER TRI_SALBEFORE UPDATE OF SAL ON EMPFOR EACH ROWDECLAREBEGINIF(:NEW.SAL>P_MSAL.MAXSAL) THENraise_application_error(-20000,'职员薪金超限,拒绝服务');ELSEdbms_output.put_line('薪金修改成功');END IF;END;3.设置员工的工资不能低于原工资,但也不能高出原工资的20%CREATE OR REPLACE TRIGGER TRI_MSALBEFORE UPDATE OF SAL ON EMPFOR EACH ROWDECLAREBEGINIF(:NEW.SAL>=:OLD.SAL AND :NEW.SAL<=:OLD.SAL*(1*0.2)) THENdbms_output.put_line('职员薪金修改成功');ELSEraise_application_error(-20000,'薪金修改失败');END IF;END;


原创粉丝点击