트리거를 이용한 응용

여기에서는 데모 데이터베이스에 있는 트리거 정의에 대해 알아본다.

demodb 데이터베이스에 생성되어 있는 트리거는 그리 복잡하지는 않지만 CUBRID에서 사용할 수 있는 대부분의 기능을 활용한다.

사용자 데이터베이스에 직접 생성한 트리거는 사용자가 만든 응용 프로그램만큼이나 강력할 수 있다.

데모 데이터베이스에 생성된 트리거

여기에서는 데모 데이터베이스 내의 테이블을 사용하여 생성한 트리거에 대해 설명한다. 이러한 트리거를 테스트할 때, demodb 데이터베이스의 원형을 유지하고 싶다면 데이터에 변경이 있은 후 롤백을 수행해야 한다. 

CREATE TRIGGER medal_trigger
BEFORE UPDATE ON participant
IF new.gold < 0 OR new.silver < 0 OR new.bronze < 0
EXECUTE REJECT; 

UPDATE participant
SET gold = -10
WHERE nation_code = ’BLA’;

CREATE TRIGGER medal_trig
STATUS ACTIVE
BEFORE UPDATE ON participant
IF new.gold < 0 OR new.silver < 0 OR new.bronze < 0
EXECUTE REJECT;

ALTER TRIGGER medal_trig
STATUS INACTIVE;

CREATE TRIGGER check_null_first
BEFORE COMMIT
IF 0 < (SELECT count(*) FROM athlete WHERE gender IS NULL)
OR 0 < (SELECT count(*) FROM game WHERE nation_code IS NULL)
EXECUTE REJECT;

CREATE TRIGGER deferred_check_on_record
DEFERRED UPDATE ON record
IF obj.score = ’100’
EXECUTE INVALIDATE TRANSACTION;

CREATE CLASS foo (n int);
CREATE TRIGGER foo_trigger
    DEFERRED UPDATE ON foo
    IF old.n = 100
    EXECUTE PRINT ’foo_trigger’;

ERROR: Error compiling condition for ’foo_trigger’ : old.n is not defined.