안녕하세요 .
이번 포스팅은 Altibase Trigger(트리거) 정리 입니다.
Altibase Trigger(트리거) 생성 방법을 정리해 보았습니다.
1. Trigger(트리거) 란?
: 트리거란 데이터베이스 서버에서 특정 이벤트 발생 후 자동적으로 실행되는 Stored Procedure
한 종류 입니다.
즉,INSERT 등과 같은 이벤트 발생 후 자동으로 실행되는 또 하나의 Stored Procedure 라고 생각하시면
될듯 합니다.
2. Trigger 생성하기
: 트리거를 생성은 SYS 사용자 또는 트리거를 생성할 수 있는 권한을 가진 사용자만 생성이 가능합니다.
+ ALTIBASE 트리거는 DELETE, INSERT, UPDATE DML 문에서 지정 가능 합니다.
+ ALTIBASE 트리거는 이중화(Replication)로 인한 테이블 변경(DML문 실행) 에 대해서는 트리거가
발생하지 않습니다.
EX )
CREATE TRIGGER INSERT_TRIGGER
AFTER[BEFORE] INSERT[UPDATE/DELETE] ON orders[TABLENAME]
REFERENCING OLD[NEW] ROW old_row[new_row]
FOR EACH ROW
AS BEGIN
REFERENCING OLD[NEW] ROW old_row[new_row]
FOR EACH ROW
AS BEGIN
INSERT INTO log_table VALUES(old_row.seq, old_row.name,sysdate);
END;
/
END;
/
- Query를 한줄 씩 살펴 보도록 하겠습니다.
CREATE TRIGGER INSERT_TRIGGER // 트리거 생성 구문 시작이며 [INSERT_TRIGGER] 가 트리거의
이름입니다.
AFTER[BEFORE] INSERT[UPDATE/DELETE] ON orders[TABLENAME]
// AFTER는 이벤트 발생 후 BEFORE는 이벤트 발생전에 이 트리거를 실행 한다는 것입니다.
// INSERT,UPDATE,DELETE 구문 지정 및 TABLE 을 지정합니다. -- 지정된 TABLE에 DML 발생 시 생성한
트리거가 동작합니다.
REFERENCING OLD[NEW] ROW old_row[new_row]
// 참조를 지정합니다. OLD는 DELETE 나 UPDATE 발생 시 삭제(업데이트) 되기전 데이터를 참조한다는
것이며 NEW 는 INSERT,DELETE,UPDATE 발생 시 새로 생긴 데이터를 참조한다는 것입니다.
뒤에 ROW 는 참조한 데이터의 이름을 지정하여 밑에서 사용합니다.
FOR EACH ROW // 변경된 ROW 만큼 FOR문을 수행합니다.
INSERT INTO log_table VALUES(old_row.seq, old_row.name,sysdate);
// 참조한 old_row(위에서 지정한 이름) 를 사용하여 seq 컬럼, name 컬럼 및 현재 시간을 log_table
저장하는 query 를 실행 합니다.
3. Trigger 상태변경
- ALTER TRIGGER [trigger name] ENABLE : 트리거 사용
- ALTER TRIGGER [trigger name] DISABLE : 트리거 사용 중지
- ALTER TRIGGER [trigger name] COMPILE : 트리거 컴파일
* 감사합니다.