트리거는 특정 테이블에서 INSERT, UPDATE, DELETE 와 같은 DML 문이 실행될때,
즉 테이블의 이벤트가 발생했을때 자동으로 특정 작업을 수행하도록 미리 정의해두는 객체이다.
예를 들어, 회원 탈퇴 시 회원 정보를 다른 테이블로 자동으로 옮기거나,
상품의 입출고 기록이 생성될 때마다 재고 수량을 자동으로 업데이트하는 등의 작업을 자동화할 수 있다
트리거의 종류
- 실행 시기에 따른 분류:
- BEFORE 트리거: 이벤트가 발생하기 전에 실행
- AFTER 트리거: 이벤트가 발생한 후에 실행
- SQL 문이 영향을 미치는 행에 따른 분류:
- 문장 트리거(Statement Trigger): 이벤트가 발생한 SQL 문에 대해 딱 한 번 실행
- 행 트리거(Row Trigger): 이벤트가 발생한 각 행에 대해 한 번씩 실행
- :OLD - BEFORE UPDATE(수정전 자료), BEFORE DELETE(삭제전 자료)
- :NEW - AFTER INSERT(추가된 자료), AFTER UPDATE(수정후 자료)
트리서 생성 구문
1
2
3
4
5
6
7
8
|
CREATE [OR REPLACE] TRIGGER 트리거명
BEFORE | AFTER INSERT | UPDATE | DELETE ON 테이블명
[FOR EACH ROW]
BEGIN
-- 실행할 내용
END;
/
|
cs |
트리거 예시
1 EMPLOYEE 테이블에 새로운 행이 삽입될 때마다 메시지를 출력하는 트리거
1
2
3
4
5
6
7
|
CREATE OR REPLACE TRIGGER TRG_01
AFTER INSERT ON EMPLOYEE
BEGIN
DBMS_OUTPUT.PUT_LINE('신입사원님 안녕하세요.');
END;
/
|
cs |
2 상품 입출고 제거 수량을 자동으로 관리하는 트리거
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
CREATE OR REPLACE TRIGGER TRG_02
AFTER INSERT ON TB_PRODETAIL
FOR EACH ROW
BEGIN
IF(:NEW.STATUS = '입고')
THEN UPDATE TB_PRODUCT
SET STOCK = STOCK + :NEW.AMOUNT
WHERE PCODE = :NEW.PCODE;
END IF;
IF(:NEW.STATUS = '출고')
THEN UPDATE TB_PRODUCT
SET STOCK = STOCK - :NEW.AMOUNT
WHERE PCODE = :NEW.PCODE;
END IF;
END;
/
|
cs |
'SQL' 카테고리의 다른 글
SQL : PL/SQL (0) | 2024.08.19 |
---|---|
SQL : VIEW 뷰 (0) | 2024.08.19 |
SQL: ETC(DCL, TCL) (0) | 2024.08.19 |
SQL: DDL(ALTER/ DROP) (0) | 2024.08.18 |
SQL : DML(INSERT/ UPDATE/ DELETE) (0) | 2024.08.17 |