728x90
반응형

 

Oracle 트리거 사용방법

 

 

트리거란 ?

테이블에 대한 이벤트(INSERT, UPDATE, DELETE)에 반응하여 자동으로 실행되는 작업

 

 

트리거 문법

  • [OR REPLACE] : 등록된 트리거가 있을 경우, 새로 생성하는 트리거로 변경
  • BEFORE or AFTER : 쿼리 트리거이벤트가 발생하기 전, 후 지정
  • INSERT or UPDATE or DELETE : 트리거이벤트 유형을 지정
  • [FOR EACH ROW] : 각 행에 대해 트리거를 실행여부를 지정
  • [WHEN 조건] : 트리거가 실행되는 조건을 기입
  • [DECLARE 변수 선언] : 트리거 내에서 사용할 변수를 선언

 

트리거이벤트 OLD NEW
INSERT X O
UPDATE O O
DELETE O X
  • OLD 기존 데이터 (UPDATE, DELETE의 데이터)
  • NEW 신 데이터 (INSERT, UPDATE의 데이터)
  • :OLD.컬럼명 / :NEW.컬럼명

 

 

트리거 예시

테이블이 이벤트가 발생하였을 경우

CREATE OR REPLACE TRIGGER "TR_TEST_LOG"
   AFTER DELETE OR INSERT ON TEST_TABLE
   FOR EACH ROW
BEGIN
   IF INSERTING THEN
      INSERT INTO TEST_TABLE_LOG
                ( 
                     COL_A
                   , COL_B

                ) VALUES (
                   , :NEW.COL_A
                   , :NEW.COL_B
                )
           ;

  ELSIF DELETING THEN
      INSERT INTO TEST_TABLE_LOG
                ( 
                     COL_A
                   , COL_B

                ) VALUES (
                   , :OLD.COL_A
                   , :OLD.COL_B
                )
           ;
    END IF;
END;

 

테이블의 컬럼에 이벤트가 발생하였을 경우

CREATE OR REPLACE TRIGGER "TR_TEST_LOG"
   AFTER DELETE OR INSERT OR UPDATE OF T1, T2 ON TEST_TABLE
   FOR EACH ROW
BEGIN
   IF INSERTING THEN
      INSERT INTO TEST_TABLE_LOG
                ( 
                     COL_A
                   , COL_B

                ) VALUES (
                   , :NEW.COL_A
                   , :NEW.COL_B
                )
           ;

  ELSIF UPDATING THEN
  
      DELETE FROM TEST_TABLE_LOG
       WHERE COL_A = :NEW.COL_A
         AND COL_B = :NEW.COL_B
     ;
      
      INSERT INTO TEST_TABLE_LOG
                ( 
                     COL_A
                   , COL_B

                ) VALUES (
                   , :OLD.COL_A
                   , :OLD.COL_B
                )
           ;
           
  ELSIF DELETING THEN
       DELETE FROM TEST_TABLE_LOG
        WHERE COL_A = :NEW.COL_A
          AND COL_B = :NEW.COL_B
       ;           
       
    END IF;
END;

 

 

 

728x90
반응형

'DB > Oracle' 카테고리의 다른 글

[Oracle] 시노님 Synonym Example  (0) 2024.03.12
[Oracle] TO_CHAR 함수 Example  (0) 2024.03.11
[Oracle] CONNECT BY LEVEL Example  (0) 2024.03.11
[Oracle] lNSTR 함수 Example  (0) 2024.03.11
[Oracle] LAST_DAY 함수 Example  (0) 2024.03.11

+ Recent posts