触发器同步表

若果只是某几张表, 建议使用物理视图吧。 因为已经存在了DB_LINK 在TB上建立个物理视图 步骤: 建立TA,TB的DB_LINK 在源数据库上,创建要同步表的快照日志 Create snapshot log on Ta.tablename 在目标数据库上创建快照(被同步(源)数据库服务必须启动) Create snapshot sn_user as select * from user@dblink_TA Alter snapshot sn_TA.tablename refresh fast Start with sysdate next sysdate+30/24*60*60; --oracle自动在当前时间立即进行第一次快速刷新,以后每隔30秒快速刷新一次 现在实现了TA某表到TB的,然后 将sn_TA.tablename建个触发,如 CREATE OR REPLACE TRIGGER BST114.TRI_USER_AFR AFTER DELETE OR INSERT OR UPDATE ON BST114.SN_user  REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW declare     tmp_id number(10):=-1;     flag number(3):=0; begin   dbms_output.put_line('begin');   if inserting then                for p in(select id from user where id=:new.id)       loop         tmp_id:=p.id;       end loop;              dbms_output.put_line(tmp_id | |'===------------');       if (tmp_id=-1) then           insert into user(id,name,age)           values(:new.id,:new.name,:new.age);       end if;   end if;      if updating then      dbms_output.put_line('updated');      for p in(select name,age from user where id=:old.id)      loop          if (p.name!=:new.name) or (p.age!=:new.age) then               update user set name=:new.name,age=:new.age where id=:old.id;          end if;      end loop;   end if;      if deleting then       dbms_output.put_line('deleted');       delete from user where id=:old.id;   end if;   dbms_output.put_line('end'); end TRI_USER_AFR; 这样就实现了TB中物理视图到 目的表的数据传输。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值