Sql 为什么我在更新员工工资时触发错误?
这是我运行的sql语句 基本上,我想做的是,当用户试图更新员工的工资时,触发器将自动填充与他/她的工资相对应的员工等级Sql 为什么我在更新员工工资时触发错误?,sql,oracle,jdbc,Sql,Oracle,Jdbc,这是我运行的sql语句 基本上,我想做的是,当用户试图更新员工的工资时,触发器将自动填充与他/她的工资相对应的员工等级 create or replace TRIGGER CHECK_GRADE BEFORE INSERT OR UPDATE ON EMPLOYEE FOR EACH ROW DECLARE LoSal NUMBER(8, 2); HiSal NUMBER(8, 2); Letter VARCHAR(1); Sal NUMBER(8
create or replace TRIGGER CHECK_GRADE
BEFORE INSERT OR UPDATE ON EMPLOYEE
FOR EACH ROW
DECLARE
LoSal NUMBER(8, 2);
HiSal NUMBER(8, 2);
Letter VARCHAR(1);
Sal NUMBER(8, 2);
BEGIN
IF(:NEW.GLetter IS NOT NULL)
THEN
Sal := NVL(:NEW.Salary, -1);
SELECT MinSalary, MaxSalary
INTO LoSal, HiSal
FROM GRADE
WHERE GLetter = :NEW.GLetter;
IF(NOT(Sal BETWEEN LoSal AND HiSal))
THEN
RAISE_APPLICATION_ERROR(-20001, 'Salary does not correspond to grade error! ' );
END IF;
ELSIF(:NEW.Salary IS NOT NULL)
THEN
SELECT GLetter
INTO Letter
FROM GRADE
WHERE :NEW.Salary BETWEEN MinSalary AND MaxSalary;
:NEW.GLetter := Letter;
END IF;
END;
员工表
具有名称、部门名称和其他以及薪资和等级等属性
等级表已更改
米萨拉尔
最高工资
成绩信
update employee set salary = 25500 where employeeid = 1006;
由于此处的这一部分而引发错误:
Error starting at line : 2 in command -
update employee set salary = 25500 where employeeid = 1006
Error report -
ORA-20001: Salary does not correspond to grade error!
ORA-06512: at "gh12345.CHECK_GRADE", line 18
ORA-04088: error during execution of trigger 'gh12345.CHECK_GRADE'
您正在将薪资设置为25500,该值超出了此表中定义的范围GRADE
因此,您应该对此表进行查询,并为
工资定义一个在此范围内的值,或者更新等级表以适应新的需求范围。我感到困惑。很明显,如果您试图将薪资设置在员工的等级之外,您的触发代码就会抛出一个错误。你的问题的正文说你想根据薪水改变等级(我们是否假设每个等级都是一个唯一的范围,并且范围之间没有差距?)如果目标是改变等级,为什么会出现加薪申请错误呼叫?如果目标是改变成绩,为什么没有任何东西试图设置:new.GLetter
?
SELECT MinSalary, MaxSalary
INTO LoSal, HiSal
FROM GRADE
WHERE GLetter = :NEW.GLetter;
IF(NOT(Sal BETWEEN LoSal AND HiSal))
THEN
RAISE_APPLICATION_ERROR(-20001, 'Salary does not correspond to grade error! ' );
END IF;