Oracle编写一个触发器,当修改emp表中的工资时,保证“10”号部门不超过50000元,其他部门不超过70000元。
时间: 2024-06-13 19:09:53 浏览: 21
以下是Oracle编写一个触发器,当修改emp表中的工资时,保证“10”号部门不超过50000元,其他部门不超过70000元的代码:
```sql
CREATE OR REPLACE TRIGGER check_sal
BEFORE UPDATE OF sal ON emp
FOR EACH ROW
DECLARE
v_deptno emp.deptno%TYPE;
v_max_sal NUMBER(8,2);
BEGIN
SELECT deptno, CASE deptno WHEN 10 THEN 50000 ELSE 70000 END INTO v_deptno, v_max_sal FROM dual;
IF :new.sal > v_max_sal AND :new.deptno = v_deptno THEN
RAISE_APPLICATION_ERROR(-20001, '该部门工资不能超过'||v_max_sal||'元');
END IF;
END;
```
触发器的作用是在更新emp表中的sal字段时,检查该职工所在部门的工资是否超过了规定的上限。如果超过了,则会抛出一个自定义的应用程序错误。
相关问题
oracle触发器实现emp表中对奖金进行调整后,所有员工的总奖金不能超过50000的代码
好的,以下是实现emp表中对奖金进行调整后,所有员工的总奖金不能超过50000的Oracle触发器代码:
```sql
CREATE OR REPLACE TRIGGER trigger_emp_bonus_adjust
AFTER UPDATE OF bonus ON emp
FOR EACH ROW
DECLARE
total_bonus NUMBER;
BEGIN
SELECT SUM(bonus) INTO total_bonus FROM emp;
IF total_bonus > 50000 THEN
RAISE_APPLICATION_ERROR(-20001, 'Error: Total bonus cannot exceed 50000!');
END IF;
END;
```
这个触发器会在emp表中的奖金字段(bonus)更新后触发。它会计算所有员工的总奖金,并检查是否超过了50000。如果总奖金超过了50000,触发器会抛出一个应用程序错误。
oracle为emp表创建一个触发器,保证修改员工工资时,修改后的工资低于该部门最高工资,同时高于该部门的最低工资
可以使用以下代码创建一个触发器,实现上述功能:
```
CREATE OR REPLACE TRIGGER emp_salary_check
BEFORE UPDATE OF salary ON emp
FOR EACH ROW
DECLARE
max_salary emp.salary%TYPE;
min_salary emp.salary%TYPE;
BEGIN
SELECT MAX(salary) INTO max_salary FROM emp WHERE deptno = :NEW.deptno;
SELECT MIN(salary) INTO min_salary FROM emp WHERE deptno = :NEW.deptno;
IF :NEW.salary > max_salary THEN
RAISE_APPLICATION_ERROR(-20001, 'Error: Salary exceeds department maximum');
ELSIF :NEW.salary < min_salary THEN
RAISE_APPLICATION_ERROR(-20002, 'Error: Salary falls below department minimum');
END IF;
END;
/
```
该触发器在每次更新 emp 表的 salary 字段时会自动触发。首先,它会查询该员工所在部门的最高工资和最低工资,并将这些值存储到变量中。然后,它会检查新的工资值是否超过了部门最高工资或低于了部门最低工资,并在这种情况下引发错误。注意,这个触发器假设在 emp 表中已经存在了部门的最高和最低工资。如果这些值还没有被计算出来,那么这个触发器可能会出现问题。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![sql](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)