Programming/Oracle

지정 컬럼에 대한 트리거 실행

초록깨비 2022. 9. 29. 09:40
728x90

TRIGGER란 : 이벤트가 발생하면 데이터베이스에 의해 자동으로 수행 

 

 

[ 테이블의 지정된 column에 대해서 트리거 실행 시키는 방법!!! ]  

 

예제) 

     TB_TEST의 acc_nm1, acc_nm2, acc_nm3, acc_nm4, acc_nm5, acc_short_nm, acc_eng_nm

     데이타 변경시 TB_TEST_LOG에 이력 남기기

 

 

트리거) 

create or replace trigger TR_TEST_U
  after UPDATE of acc_nm1, acc_nm2, acc_nm3, acc_nm4, acc_nm5, acc_short_nm, acc_eng_nm on TB_TEST
  referencing new as new old as old
  for each row

declare 


begin


        insert into tb_test_log
         ( acc_cd, 
           chg_dt,
           acc_nm1,
           acc_nm2,
           acc_nm3,
           acc_nm4,
           acc_nm5,
           acc_short_nm,
           acc_eng_nm,
           chg_div,
           create_id,
           create_dt,
           create_ip)
         values
          ( :new.acc_cd, 
            sysdate,
            :new.acc_nm1,
            :new.acc_nm2,
            :new.acc_nm3,
            :new.acc_nm4,
            :new.acc_nm5,
            :new.acc_short_nm,
            :new.acc_eng_nm,
            'U',
            :new.modify_id,
            sysdate,
            :new.modify_ip
          ); 
exception
    when others then  
               RAISE_APPLICATION_ERROR(-20002,'TR_TEST_UError '||sqlerrm);
end ; 

 

 

 

수행시점 수행단위 비고
BEFORE   DML문 수행 전에 실행
AFTER   DML문 수행 후에 실행
BEFORE FOR EACH ROW DML문 수행 전에 행단위로 실행
AFTER FOR EACH ROW DML문 수행 후에 행단위로 실행

 

  OLD NEW
INSERT   삽입값
UPDATE 갱신 전 값 갱신 후 값
DELETE 삭제 값  

 

◆ 단순 DML TRIGGER 실행 순서

     1) BEFORE 문장 단위 DML 트리거

     2) BEFORE 행 단위 DML 트리거

     3) AFTER 행 단위 DML 트리거

     4) AFTER 문장 단위 DML 트리거 

 

◆ TRIGGER 조회

      SELECT * FROM USER_TRIGGERS ; 

 

◆ 트리거 유형

     . DML 트리거 

          1) 단순 DML 트리거

                1-1) 문장 단위 DML 트리거

                1-2) 행 단위 DML 트리거

          2) INSTEAD OF DML  트리거

          3) 복합 DML 트리거

 

      . 시스템 트리거

          1) 데이터베이스 트리거

          2) 스키마 트리거

          3) INSTEAD OF CREATE 트리거 

 

728x90