트리거(Trigger)
- 특정 테이블에 INSERT,UPDATE,DELETE와 같은 DML문이 수행되었을 때, 데이터베이스에서 자동으로 동작하도록 작성된 프로그램
- 사용자가 직접 호출하여 사용하는 것이 아니라 데이터베이스에서 자동적으로 수행
- 테이블과 뷰, 데이터베이스 작업을 대상으로 정의할 수 있으며, 전체 트랙잭션 작업에 대해 발생되는 트리거와 각행에 대해 발생되는 트리거가 있다.
트리거(Trigger) 종류
- 문장 트리거
트리거가 설정된 테이블에 트리거 이벤트가 발생하면 많은 행에 대해 변경 작업이 발생하더라도 오직 한번만 트리거를 발생시키는 방법이다. 컬럼값이 변화가 생길때마다 스스로 알아서 실행 된다. (FOR EACH ROW 옵션X)
-> "UPDATE oracleStudy SET grade = grade + 10;" 이런 문장이 실행됨으로 여러행이 변경될경우 트리거는 단 한번만 실행된다.
- 행 트리거
: 조건을 만족하는 여러 개의 행에 대해 트리거를 반복적으로 여러번 수행하는 방법으로
[FOR EACH ROW WHEN 조건] 절로 정의된다. 컬럼의 데이터 행이 변화가 오면 실행된다. 변경 후의 행은 OLD 와 NEW를 통해 가져올 수 있다. (FOR EACH ROW 옵션 O)
트리거(Trigger) 사용방법
CREATE [ OR REPLACE ]TRIGGER 트리거명
BEFORE | AFTER [동작(INSERT,UPDATE,DELETE)] ON 테이블명 // 테이블에 이벤트 발생
[ FOR EACH ROW ] // 실행될 문장 행에 각각 적용
[ DECLARE ] //변수선언
변수1 테이블명.컬럼명%TYPE;
변수2 테이블명.컬럼명%TYPE;
[ WHEN 조건식 ]
BEGIN
// 이벤트 발생 시 실행할 문장 주로 DML
END;
/
[바인드 변수]
- 매개변수, 전달변수, PL/SQL에서는 변수명 앞에 ':'을 사용
- :new 는 새로 입력 된 데이터 (INSERT,UPDATE)
- :old 는 이미 저장되어있는 기존 데이터
=> BEGIN~EDN에서 사용 시 : :new.컬럼명, :old.컬럼명으로 사용
- 변수에 값을 치환할 경우 예약어 set 사용
트리거(Trigger) 제한/관리
- 트리거는 트랜잭션 제어문(COMMIT, ROLLBACK, SAVEPOINT)을 사용할 수 없다.
- 트리거 활성화/비활성화
-> ALTER TRIGGER 트리거명[DISABLE | ENABLE]
- 테이블에 속한 트리거 활성화/비활성화
-> ALTER TABLE 테이블명[DISABLE | ENABLE] ALL TRIGGER
- 트리거 수정 후 재컴파일
-> ALTER TRIGGER 트리거명 COMPILE
- 트리거 삭제
-> DROP TRIGGER 트리거명
- 트리거 조회
-> SELECT * FROM USER_TRIGGERS
[참고]
'프로그래밍&IT > Oracle' 카테고리의 다른 글
[Oracle] 셀프조인(SELF JOIN) (0) | 2021.07.27 |
---|---|
[Oracle] 계층형 질의 (0) | 2021.07.27 |
[Oracle] 외래키 수정/삭제 하기 (0) | 2021.07.20 |
[Oracle] NULL 치환 함수(NVL, NVL2, NULLIF, COALESCE) (0) | 2021.07.15 |
[Oracle] 제약조건 - 외래키(FK, Foreign key) (0) | 2021.07.14 |