2017-11-21 4 views
0

테이블이 업데이트되고 트리거에 의해 뷰가 업데이트 될 때 트리거 대신 작동 시키려고합니다.트리거 대신 트리거하는 방법

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 트리거가 트리거되지 않습니까? 나는 해고당하는 것 같지 않아.

답변

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;