트리거
트리거란 영어로 방아쇠다.
방아쇠를 당기면 그로 인해 총기 내부에서 알아서 일련의 작업을 실행하고 총알이 날아가는 것처럼 데이터베이스 이벤트에 반응하여 실행되는 프로그램 단위이다.
트리거링 이벤트에 대해 자동으로 실행되는 프로시저로 데이터베이스에 저장되는 스키마 오브젝트이다.
트리거의 주요 사용목적은 테이블 데이터의 무결성 보장, 데이터베이스 관리의 자동화 등이라고 할 수 있다.
트리거 이벤트
- 데이터 조작어(DML) : insert, update, delete
- 데이터 정의어(DDL) : create, alter, drop
- 데이터베이스 오퍼레이션 : servererror, logon, startup or shutdown
트리거 타이밍
- before : 이벤트가 발생하기 전에
- after : 이벤트가 발생한 후에
- for each row
1) 행 트리거 : DML의 영향을 받는 모든 행, 레코드마다 트리거가 작동되는 트리거
2) 명령문 트리거 : 몇 건의 삽입, 삭제, 갱신이 있어도 한번만 동작하는 트리거
- :old :new
for each row 절이 있다면 행 트리거이고 행 트리거에 한해 레코드의 값을 제어할 수 있다.
1) :old : update되기 전의 값, delete되기 전의 값에 접근 가능
2) :new : insert되는 값, update된 후의 값에 접근 가능
- when
: when절에 조건을 줘서 조건에 맞는 경우에만 트리거가 동작되도록 할 수 있다.
트리거 우선순위
오라클에서 동일한 트리거 이벤트, 타이밍에 대해 여러 개의 트리거를 작성하는 것은 가능하다.
오라클 11g이후 동일한 트리거링 이벤트 및 트리거 타이밍에 대해 실행되는 트리거가 여러 개인 경우
FOLLOWS, PRECEDES구를 통해 실행의 우선순위를 정하는 것이 가능하다.
DML트리거
DML트리거는 DML문(insert, update, delete)이 테이블의 하나 이상의 데이터에 영향을 미칠 때 자동으로 실행되는 트리거이다. 프로시저나 함수는 사용자가 직접 호출해야 하지만, 트리거는 오라클에서 사용자에게 알려주지 않고 자동으로 호출하여 처리한다.
DML트리거의 특징
- 자동으로 실행되며 수동으로 실행할 수 없다.
- 어떤 동작에서 실행되는지 지정해야 한다.
- 작동이 일어난 트리거 대상 테이블에 대해서는 트리거 내용이 존재할 수 없다.
- BEFORE, AFTER두 가지 트리거가 있다.
- 트랜잭션 일부로 처리된다. (commit, rollback, savepoint문장을 포함못함)
DML트리거 생성
CREATE [OR REPLACE] TRIGGER <트리거이름>
{BEFORE|AFTER}<이벤트>ON<테이블>
[FOR EACH ROW]
[WHEN(<조건>)]
[DECLARE(<변수선언>)]
BEGIN
<실행코드>
[EXCEPTION<예외사항>]
END<트리거이름>;
[참조]
https://m.blog.naver.com/leejongcheol2018/222035608132
https://limkydev.tistory.com/154
'차근차근 > Oracle' 카테고리의 다른 글
뷰 View (0) | 2021.12.22 |
---|---|
패키지 Package (0) | 2021.12.22 |
다른 db 테이블 조회 (0) | 2021.12.21 |
PL/SQL - 커서(CORSOR) (0) | 2021.12.13 |
PL/SQL기초 (0) | 2021.12.13 |