프로그래밍

Oracle PL/SQL - Trigger

RainIron 2021. 9. 28. 12:35
반응형

* 사용 예시

- 한 테이블에 변경이 발생하면 동시에 다른 테이블들에 변경을 가한다.

- 데이터의 변경이 데이터베이스에 저장되기 전에 값을 검증하고 필요시 다른 값으로 변경한다.

- 조건 판단에 따라서 이벤트의 발생을 허용하거나 차단한다.

- 발생한 이벤트에 대한 로그를 남긴다.

- 자동으로 계산 칼럼의 값을 생성한다.

- 뷰에 대한 DML문 수행 시 다른 테이블을 변경한다.

- 제약 조건으로 생성할 수 없는 복잡한 업무 규칙을 적용하여 데이터의 무결성을 보장한다.

- 분산 DB 환경에서 부모, 자식 테이블 간의 참조 무결성을 보장한다.

1. 선언

CREATE OR REPLACE TRIGGER 트리거명
발생시점 DML이벤트 [ OF 칼럼명 ] ON 테이블 또는 뷰
참조절
FOR EACH ROW
WHEN (조건)
DECLARE
	선언부
BEGIN
	실행부
EXCEPTION
	예외처리부
END;

(예시)

CREATE OR REPLACE TRIGGER tr_emp_ins_upd_validate
    BEFORE INSERT OR UPDATE OF sal, comm ON emp
    REFERENCING OLD AS OLD NEW AS NEW
    FOR EACH ROW
BEGIN
    IF INSERTING THEN
        IF :NEW.sal < 0 THEN
            DBMS_OUTPUT.PUT_LINE('급여가 음수입니다.');
            :NEW.sal := NULL;
        END IF;
        IF :NEW.comm < 0 THEN
            DBMS_OUTPUT.PUT_LINE('커미션이 음수입니다.');
            :NEW.comm := NULL;
        END IF;
    ELSIF UPDATING THEN
        IF :OLD.sal < :NEW.sal THEN
            DBMS_OUTPUT.PUT_LINE('급여가 낮아졌습니다.');
            :NEW.sal := :OLD.sal;
        END IF;
        IF :OLD.comm < :NEW.comm THEN
            DBMS_OUTPUT.PUT_LINE('커미션이 낮아졌습니다.');
            :NEW.comm := OLD.comm;
        END IF;
    END IF;
END;

 

* 발생시점 예시

- INSERT ON emp

- DELETE ON emp

- UPDATE ON emp

- UPDATE OF sal, comm ON emp

- INSERT OR DELETE OR UPDATE OF sal, comm ON emp

 

* 참조절

- OLD: 변경 전의 값을 가지는 레코드명

- NEW: 변경 후의 값을 가지는 레코드명

 

* 트리거의 호출 순서

1) BEFORE 시점의 문장 단위 트리거

2) BEFORE 시점의 로우 단위 트리거

3) AFTER 시점의 로우 단위 트리거

4) AFTER 시점의 문장 단위 트리거

FOLLOWS 트리거명

- FOLLOWS 트리거명: 자신보다 먼저 실행될 트리거를 지정

 

※ 출처: 개발자를 위한 PL/SQL 프로그래밍

반응형

'프로그래밍' 카테고리의 다른 글

SQL 튜닝 - INDEX  (0) 2021.09.30
SQL 튜닝 - 실행계획, 옵티마이저, 튜닝 절차  (0) 2021.09.29
Oracle PL/SQL - Stored Subprogram  (0) 2021.09.28
Oracle PL/SQL - 동적 SQL  (0) 2021.09.24
Oracle PL/SQL - Cursor  (0) 2021.09.24