编写存储过程和触发器,实现对scott公司员工增.加奖金,10部门门增加额为工资的20%,20部门增加额为工资的15%,30部门增加额为工资的10%, 对于职位为MANAGER且工资高于2500的员工不增加奖金。
时间: 2024-01-21 14:19:07 浏览: 29
存储过程实现如下:
```sql
CREATE PROCEDURE add_bonus
AS
BEGIN
-- 对于10部门,增加额为工资的20%
UPDATE emp
SET sal = sal * 1.2
WHERE deptno = 10;
-- 对于20部门,增加额为工资的15%
UPDATE emp
SET sal = sal * 1.15
WHERE deptno = 20;
-- 对于30部门,增加额为工资的10%
UPDATE emp
SET sal = sal * 1.1
WHERE deptno = 30;
-- 对于职位为MANAGER且工资高于2500的员工不增加奖金
UPDATE emp
SET sal = sal + sal * 0.1
WHERE job <> 'MANAGER' OR sal <= 2500;
END;
```
触发器实现如下:
```sql
CREATE TRIGGER add_bonus_trigger
AFTER INSERT ON emp
FOR EACH ROW
BEGIN
-- 对于10部门,增加额为工资的20%
IF NEW.deptno = 10 THEN
UPDATE emp
SET sal = sal * 1.2
WHERE empno = NEW.empno;
END IF;
-- 对于20部门,增加额为工资的15%
IF NEW.deptno = 20 THEN
UPDATE emp
SET sal = sal * 1.15
WHERE empno = NEW.empno;
END IF;
-- 对于30部门,增加额为工资的10%
IF NEW.deptno = 30 THEN
UPDATE emp
SET sal = sal * 1.1
WHERE empno = NEW.empno;
END IF;
-- 对于职位为MANAGER且工资高于2500的员工不增加奖金
IF NEW.job <> 'MANAGER' OR NEW.sal <= 2500 THEN
UPDATE emp
SET sal = sal + sal * 0.1
WHERE empno = NEW.empno;
END IF;
END;
```
注意:触发器只对插入操作起作用,如果需要对更新和删除操作也起作用,需要分别创建UPDATE和DELETE触发器。