테이블에 대한 이벤트(INSERT, UPDATE, DELETE)에 반응하여 자동으로 실행되는 작업
트리거 문법
[OR REPLACE] : 등록된 트리거가 있을 경우, 새로 생성하는 트리거로 변경
BEFORE or AFTER : 쿼리 트리거이벤트가 발생하기 전, 후 지정
INSERT or UPDATE or DELETE : 트리거이벤트 유형을 지정
[FOR EACH ROW] : 각 행에 대해 트리거를 실행여부를 지정
[WHEN 조건] : 트리거가 실행되는 조건을 기입
[DECLARE 변수 선언] : 트리거 내에서 사용할 변수를 선언
트리거이벤트
OLD
NEW
INSERT
X
O
UPDATE
O
O
DELETE
O
X
OLD 기존 데이터 (UPDATE, DELETE의 데이터)
NEW 신 데이터 (INSERT, UPDATE의 데이터)
:OLD.컬럼명 / :NEW.컬럼명
트리거 예시
테이블이 이벤트가 발생하였을 경우
CREATE OR REPLACE TRIGGER "TR_TEST_LOG" AFTER DELETE OR INSERT ON TEST_TABLE FOR EACH ROW BEGIN IF INSERTING THEN INSERT INTO TEST_TABLE_LOG ( COL_A , COL_B
) VALUES ( , :NEW.COL_A , :NEW.COL_B ) ;
ELSIF DELETING THEN INSERT INTO TEST_TABLE_LOG ( COL_A , COL_B
CREATE OR REPLACE TRIGGER "TR_TEST_LOG" AFTER DELETE OR INSERT OR UPDATE OF T1, T2 ON TEST_TABLE FOR EACH ROW BEGIN IF INSERTING THEN INSERT INTO TEST_TABLE_LOG ( COL_A , COL_B
) VALUES ( , :NEW.COL_A , :NEW.COL_B ) ;
ELSIF UPDATING THEN
DELETE FROM TEST_TABLE_LOG WHERE COL_A = :NEW.COL_A AND COL_B = :NEW.COL_B ;
INSERT INTO TEST_TABLE_LOG ( COL_A , COL_B
) VALUES ( , :OLD.COL_A , :OLD.COL_B ) ;
ELSIF DELETING THEN DELETE FROM TEST_TABLE_LOG WHERE COL_A = :NEW.COL_A AND COL_B = :NEW.COL_B ;
여러 식 중에서 하나를 선택합니다. SQL의 OR조건과 같습니다. "abc¦adc"는 abc와 adc 문자열을 모두 포함한다.
^
문자 클래스 안의 문자를 제외한 나머지를 선택한다. 예를 들면 [^abc]d는 ad, bd, cd는 포함하지 않습니다. [^a-z]는 알파벳 소문자로 시작하지 않는 모든 문자를 의미한다.
[]
"["과 "]" 사이의 문자 중 하나를 선택한다. "¦"를 여러 개 쓴 것과 같은 의미이다. 예를 들면 [abc]d는 ad, bd, cd를 뜻한다. 또한, "-" 기호와 함께 쓰면 범위를 지정할 수 있다. "[a-z]"는 a부터 z까지 중 하나, "[1-9]"는 1부터 9까지 중의 하나를 의미한다.
()
여러 식을 하나로 묶을 수 있다. "abc¦adc"와 "a(b¦d)c"는 같은 의미를 가진다.
*
0개 이상의 문자를 포함한다. "a*b"는 "b", "ab", "aab", "aaab"를 포함한다.
+
"a+b"는 "ab", "aab", "aaab"를 포함하지만 "b"는 포함하지 않는다. [+ 앞 내용 기준]
?
"a?b"는 "b", "ab"를 포함한다. [? 다음 내용 기준]
{m}
"a{3}b"는 "aaab"만 포함한다.
{m,}
"a{2,}b"는 "aab", "aaab", "aaaab"를 포함한다. "ab"는 포함되지 않는다.