민규의 흔적

[오라클 DB] 트리거(Trigger) 본문

데이터베이스

[오라클 DB] 트리거(Trigger)

민규링 2023. 10. 22. 17:49

트리거

 

명시된 이벤트(데이터베이스의 갱신)가 발생할 때마다 DBMS가 자동적으로 수행하는 SQL문이다.

 

데이터베이스의 무결성 유지성능을 위한 일반적이고 강력한 도구이다.

 

이벤트-조건-동작 (ECA) 규칙이라고도 부른다.

 

트리거를 활성화시키는 사건인 이벤트(Event)

트리거를 활성화되었을 때 수행되는 테스트인 조건(Condition)

트리거가 활성화되고 조건이 참일 때 수행되는 문(프로시저)인 동작(Action)

 

 

 

SQL3에서 트리거의 형식

 

CREATE TRIGGER <트리거 이름>
AFTER <트리거를 유발시키는 이벤트들이 OR로 연결된 리스트> ON <릴레이션>       <- 이벤트
WHEN <조건>                                                                                                               <- 조건               
BEGIN <SQL문(들)> END                                                                                              <- 동작

 

이벤트로는 테이블에 튜플 삽입, 테이블로부터 튜플 삭제 또는 수정 등이 존재하여, 어떤 이벤트가 발생했을 때 조건이 참이 되면 트리거와 연관된 동작이 수행되고, 그렇지 않으면 아무 동작도 수행되지 않는다.

 

 

 

트리거의 분류

 

삽입, 삭제, 수정 등이 일어나기 전(before) 동작 트리거와 일어난 후(after) 동작 트리거


테이블 수준의 트리거와 행 수준의 트리거

 

 

예제 질의

 

질의 : 새로운 직원이 등록할 때, 등록 정보를 EMPLOYEE_LOG 릴레이션에 삽입 하는 트리거를 작성하시오.

 

CREATE OR REPLACE TRIGGER AFTER_EMPLOYE_EVENT
AFTER INSERT ON EMPLOYEE FOR EACH ROW
BEGIN
     INSERT INTO EMPLOYEE_LOG
     VALUES (:new.empno, :new.empname);
END;

 

EMPLOYEE 릴레이션에 튜플을 삽입하였을 때, 로그를 삽일할 EMPLOYEE_LOG 릴레이션을 아래와 같이 작성하여 생성한다.

 

CREATE TABLE EMPLOYEE_LOG(
     EMPNO NUMBER NOT NULL,
     EMPNAME 
);

 

이후, EMPLOYEE 릴레이션에 새로운 튜플을 아래와 같이 삽입하여 보자.

 

INSERT INTO EMPLOYEE VALUES (1001, '김민지', '사원', 1003, 1500000, 2);

 

EMPLOYEE 릴레이션에 삽입 연산을 진행하면 EMPLOYEE_LOG 릴레이션에 EMPNO와 EMPNAME 애트리뷰트 값을 삽입하도록 트리거를 설정해 놓았기 때문에, 아래와 같이 EMPLOYEE_LOG 릴레이션에 데이터가 추가되어야 한다.

 

(1번째 튜플은 테스트용으로 삽입했던 튜플)