我试图在更新表时(而且触发器更新视图)尝试使用此触发器而不是触发器。
CREATE OR REPLACE TRIGGER increase_boss_sub_salary
INSTEAD of UPDATE ON emp_sub_view
FOR EACH ROW BEGIN
UPDATE employees
SET salary = salary * 1.05
WHERE employee_id = :old.employee_id;
END;
emp_sub_view是employee_subordinates的视图。
employee_subordinates由此触发器触发。
CREATE OR REPLACE TRIGGER keep_sub_count
AFTER DELETE OR INSERT OR UPDATE ON EMPLOYEES
FOR EACH ROW BEGIN
IF DELETING OR UPDATING
THEN
UPDATE employee_subordinates
SET subcount = subcount - 1
WHERE employee_id = :old.manager_id;
END IF;
IF INSERTING OR UPDATING
THEN
UPDATE employee_subordinates
set subcount = subcount + 1
WHERE employee_id = :new.manager_id;
END IF;
END;
让我假装我将员工更新为新经理。这会触发keep_sub_count触发器,然后更新employee_subordinates并查看emp_sub_view。因为emp_sub_view发生了变化,所以当我发生这种情况时,我的触发器是否会触发increase_boss_sub_salary吗?我似乎无法解雇它。
答案 0 :(得分:1)
更新视图时,您的increase_boss_sub_salary触发器将会触发。 这并不意味着它在更新基础数据时会触发。这意味着在视图上执行更新SQL语句时会触发它。
例如。
update emp_sub_view
set salary=salary * 1.05
where employee_id=44;
使用而不是触发器,您可以更新视图中显示的数据,并将更新重定向到基础表。
您的触发器将是:
CREATE OR REPLACE TRIGGER increase_boss_sub_salary
INSTEAD of UPDATE ON emp_sub_view
FOR EACH ROW BEGIN
UPDATE employees
SET salary = :new.salary
WHERE employee_id = :old.employee_id;
END;