logo

English

이곳의 프로그래밍관련 정보와 소스는 마음대로 활용하셔도 좋습니다. 다만 쓰시기 전에 통보 정도는 해주시는 것이 예의 일것 같습니다. 질문이나 오류 수정은 siseong@gmail.com 으로 주세요. 감사합니다.

SQLite 활용 팁 3 - 다른 DB 테이블에 트리거 사용하기

by digipine posted Nov 01, 2017
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

SQLite에서는 Attach 하는 방법으로 다른 DB의 테이블을 마치 내 DB안의 테이블 처럼 사용할 수 있습니다.
그런데 Trigger도 사용이 가능할까요. 예를 들어 백업 용으로 같은 DB를 두개 만들고 한 DB 테이블에
INSERT가 되면 백업용 DB파일에도 같은 내용이 INSERT 되도록 Trigger를 만들 수 있을까하는 것인데

원칙적으로는 안된다고 한다. 
http://www.sqlite.org/lang_createtrigger.html 참조하시라
그런데 Temporary 트리거라는 것을 이용하면된다.
다른 DB 테이블은 그 DB가 Attach되지 않으면 사용할 수 없다 따라서 정식 트리거로 등록할 수 없는데
아래와 같이 Temporary 로 등록하는 편법을 사용하면 할수있다. 
그런데 INSERT 되는 Table이 Attcah 된 테이블이어야 한다는 제약이 따른다.

그나마 될 수 있다는 것이 다행이다.

 

아래 예제를 참조

CREATE TEMPORARY TRIGGER [LOG_BACKUP_TRIGGER]
AFTER INSERT ON BACKUP.[USER_LOG2] /* Attach 된 테이블에 INSERT */
FOR EACH ROW
BEGIN
     INSERT INTO USER_LOG(REGTIME, UID, CARD_TYPE, GRADE, REISSUE, MODE, 
                                   MATCHING_TYPE, MANAGER, STATUS, AUTH, KEY)
            VALUES(new.REGTIME, new.UID, new.CARD_TYPE, new.GRADE, new.REISSUE, 
                 new.MODE, new.MATCHING_TYPE, new.MANAGER, new.STATUS, 
                             new.AUTH, new.KEY); /* MAIN 테이블에 INSERT */
END

TAG •