如何获取而不是触发被触发
How to get instead of trigger to be triggered
我试图在 table 更新(并且视图由触发器更新)时让这个而不是触发器工作。
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。发生这种情况时,我的触发器 increase_boss_sub_salary 不会因为 emp_sub_view 发生变化而被触发吗?我似乎无法解雇它。
您的 increase_boss_sub_salary 触发器将在您更新视图时触发。
这并不意味着它会在更新基础数据时触发。这意味着它在视图上执行更新 SQL 语句时触发。
例如
update emp_sub_view
set salary=salary * 1.05
where employee_id=44;
使用 instead of 触发器,您可以更新视图中显示的数据并将更新重定向到基础表。
您的触发器将是:
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;
我试图在 table 更新(并且视图由触发器更新)时让这个而不是触发器工作。
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。发生这种情况时,我的触发器 increase_boss_sub_salary 不会因为 emp_sub_view 发生变化而被触发吗?我似乎无法解雇它。
您的 increase_boss_sub_salary 触发器将在您更新视图时触发。 这并不意味着它会在更新基础数据时触发。这意味着它在视图上执行更新 SQL 语句时触发。
例如
update emp_sub_view
set salary=salary * 1.05
where employee_id=44;
使用 instead of 触发器,您可以更新视图中显示的数据并将更新重定向到基础表。
您的触发器将是:
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;