0

我在hr架构中有一个名为的表employee,我需要在该表上创建行级触发器,以便每当我尝试更新员工表上的薪水时,我确保不会减少薪水!

我试过这个,但我得到一个错误:

错误报告:ORA-01748: 这里只允许简单的列名 01748. 00000 - “这里只允许简单的列名

CREATE or REPLACE TRIGGER salary_dec_trigger 
BEFORE UPDATE OF emp.salary
ON emp 
FOR EACH ROW 
BEGIN 
if(:new.salary>:old.salary)
then

update emp set emp.salary=emp.salary+:new.salary where emp.employee_id=:new.employee_id;
else 
rollback;
end if;
END; 
/ 
4

2 回答 2

1
CREATE or REPLACE TRIGGER salary_dec_trigger 
BEFORE UPDATE OF salary ON emp 
FOR EACH ROW 
BEGIN 
  if(:new.salary < :old.salary) then
    raise_application_error(-20001, 'Salary can''t be decreased');
  end if;
END; 
于 2013-02-06T07:39:16.170 回答
0

据我从您的代码中可以看出,您正在尝试每当您更新员工的薪水时,您实际上会将其与他以前的薪水相加,对吗?而且只允许加薪,绝不减薪。

那你为什么不直接说:new.salary = :old.salary + :new.salary?并跳过回滚,只需执行:new.salary = :old.salary;

如果它不起作用,您应该尝试使用自治事务的过程来执行此操作,但这就是 before 触发器应该允许您直接执行的操作(在此处查看)。

于 2013-02-06T07:48:48.570 回答