트리거 조건 영역
설명
트리거를 정의할 때 조건 영역을 정의하여 트리거의 수행 영역에 대한 수행 여부를 결정한다.
- 트리거 조건 영역이 기술된다면, 참 또는 거짓을 평가할 수 있는 단독적인 복합 표현식으로 쓰여질 수 있다. 이 경우에 표현식은 SELECT 문의 WHERE 절에 허용되는 산술 연산자와 논리 연산자를 포함할 수 있다. 조건 영역이 참이면, 트리거 실행 영역이 수행되고, 거짓이면 실행되지 않는다.
- 트리거의 조건 영역을 생략하면 조건 없는 트리거(unconditional trigger)가 되며 이는 트리거가 불려질 때 항상 트리거의 실행 영역이 수행된다.
예제
- 예제 1
- 다음은 조건 영역 내의 표현식에 상관명을 이용한 예제이다. 이벤트 타입이 INSERT, UPDATE, DELETE인 경우에, 조건 영역 내의 표현식은 특정 컬럼 값에 접근하기 위하여 상관명 obj, new, old를 사용할 수 있다. 예제에서 example 트리거는 record 컬럼의 현재 값을 이용해서 조건 영역을 검사하기 위해 트리거 조건 영역에 obj를 컬럼 이름 앞에 사용하였다.
CREATE TRIGGER example
........
IF obj.record * 1.20 < 500
.......
- 예제 2
- 다음은 조건 영역 내의 표현식에 SELECT 문을 사용한 예제이다. 예제의 트리거는 집계함수 COUNT( * )를 사용하는 SELECT 문을 사용하여 그 값과 상수를 비교한다. SELECT 문은 반드시 괄호로 싸여 있어야 하고, 표현식의 마지막에 위치해야 한다.
CREATE TRIGGER example
......
IF 1000 > (SELECT COUNT( * ) FROM participant)
......
주의 사항
트리거 조건 영역에 주어진 표현식은 조건 영역이 수행되는 동안에 메소드가 호출되면 데이터베이스에 부작용을 초래할 수 있다. 트리거 조건 영역은 데이터베이스에 생각지 못한 부작용이 발생하지 않도록 구성해야 한다.