반응형
* 사용 예시
- 한 테이블에 변경이 발생하면 동시에 다른 테이블들에 변경을 가한다.
- 데이터의 변경이 데이터베이스에 저장되기 전에 값을 검증하고 필요시 다른 값으로 변경한다.
- 조건 판단에 따라서 이벤트의 발생을 허용하거나 차단한다.
- 발생한 이벤트에 대한 로그를 남긴다.
- 자동으로 계산 칼럼의 값을 생성한다.
- 뷰에 대한 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 |