트리거

INSERT, UPDATE, DELETE문이 TABLE에 대해 행해질 때 묵시적으로 수행되는 PROCEDURE 입니다.

CREATE [or replace] TRIGGER trigger_name
BEFORE | AFTER
trigger_event ON table_name
[for eache row]
[when (condition)]
  • BEFORE : INSERT, UPDATE, DELETE문이 실행되기 전에 트리거가 실행됩니다.
  • AFTER : INSERT, UPDATE, DELETE문이 실행된 후 트리거가 실행됩니다.
  • trigger_event : INSERT, UPDATE, DELETE 중에서 한 개 이상 올 수 있습니다.
  • FOR EACH ROW : 이 옵션이 있으면 행 트리거가 됩니다.
    • 행 트리거 : 컬럼의 각각의 행의 데이터 행 변화가 생길 때마다 실행되며, 그 데이터 행의 실제 값을 제어할 수 있습니다.
    • 문장 트리거 : 트리거 사건에 의해 단 한번 실행되며, 컬럼의 각 데이터 행을 제어할 수 없습니다.
CREATE OR REPLACE TRIGGER update_dept
BEFORE
UPDATE ON departments
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('변경 전 컬럼 값 : ' || :old.department_name);
DBMS_OUTPUT.PUT_LINE('변경 후 컬럼 값 : ' || :new.department_name);
END;
update departments set department_name = '개발' where department_id = 270;
create or replace TRIGGER update_job_history
  AFTER UPDATE OF job_id, department_id ON employees
  FOR EACH ROW
BEGIN
  add_job_history(:old.employee_id, :old.hire_date, sysdate,
                  :old.job_id, :old.department_id);
END;

Categories:

Updated: