2路表触发2个不同的数据库,但在2个数据库的表上插入,更新和删除

时间:2016-06-16 08:51:36

标签: database oracle triggers

我有一项任务,我可以真正使用一些关于触发器的帮助。所以这就是它。我有数据库1和2让我们称它们为db1和db2。我现在有一个名为tbl_client_contact的表。我想要做的是创建一个触发器,它将在2个数据库中存在的所述表中插入,更新或删除。例如,我将在db1中的表中插入值,我应该期望这些值插入到db 2中的表中。我说得对,但问题是当我去做db2并进行操作时,我无法使在db 2中的表中插入的值将出现在db 1的表中,而不会发生类似无限循环的插入等。

CREATE OR REPLACE TRIGGER "CISTEST"."TRG_SYNC_CLIENT_CONTACT"
AFTER INSERT OR UPDATE OR DELETE ON TBL_CLIENT_CONTACT
FOR EACH ROW
DECLARE 
    PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
    IF :NEW.source IN ('CIS','CIC') THEN 
        IF INSERTING THEN
            INSERT INTO tbl_client_contact@CVLTEST
                (seq_id,client_id,contact_type_id,contact_no,default_tag,
                 source,status_id,post_by,post_date,last_update_by,
                 last_update)        
            VALUES
                (:NEW.seq_id,:NEW.client_id,:NEW.contact_type_id ,:NEW.contact_no,:NEW.default_tag,
                 :NEW.source,:NEW.status_id,:NEW.post_by,:NEW.post_date,:NEW.last_update_by,
                 :NEW.last_update);              
                 COMMIT;

        ELSIF UPDATING THEN
            UPDATE tbl_client_contact@CVLTEST
            SET contact_type_id = :NEW.contact_type_id,
                contact_no = :NEW.contact_no,
                default_tag = :NEW.default_tag,
                source = :NEW.source,
                status_id = :NEW.status_id,
                last_update_by = :NEW.last_update_by,
                last_update = :NEW.last_update
             WHERE seq_id = :OLD.seq_id;             
             COMMIT;

        ELSIF DELETING THEN
            DELETE FROM tbl_client_contact@CVLTEST 
            WHERE seq_id = :OLD.seq_id;         
            COMMIT;

        END IF;
    END IF;
END;

我在db 2中也有一个几乎相同的触发器。问题是,当我在db 2中禁用触发器时,db 1中的触发器工作正常。但是当我在db2中启用触发器时,我想要的输出就不起作用了。帮助任何人?

0 个答案:

没有答案