Table A에 INSERT를 하면, Table B에도 INSERT 되게 하기 위해서 트리거를 사용하였습니다.
그런데, Table A에 넣었던 자료를 DELETE하고, 같은 PK 값을 가지는 데이터를 입력하면 Table B에서 PK 에러가 납니다. 이러한 에러나 나지 않도록 하기 위해서 Trigger에서 Table B로 INSERT 할때 기존 값이 있으면 Table B로의 INSERT 잡업을 하지 않도록 하려고 합니다.
현재는 임시로 trigger 안에서 UPDATE와 ROW_COUNT로 기존 자료가 있는지 확인하고 있습니다.
그러나, 다른 트리거에서 Table B에 Update 이벤트가 발생할 경우 Table C로 변경 내용을 로깅하도록 하고 있어서
Table A에 데이터를 넣을 때마다 Table C에 로그 정보가 입력됩니다.
SET TERM !!;
CREATE TRIGGER A_INSERT_T FOR A
ACTIVE AFTER INSERT POSITION 0 AS
DECLARE VARIABLE ID VARCHAR(11);
BEGIN
ID=NEW.ID;
UPDATE B SET STATUS=0 WHERE ID=:ID;
IF (ROW_COUNT = 0) THEN
INSERT INTO B(ID) VALUES(:ID);
END !!
SET TERM ;!!
Firebird에서 table에 insert할 때 기존 자료가 있는지 확인할 수 있는 한 문장의 쿼리를 만들 수 있을 까요??
|