当前位置:   article > 正文

dblink加触发器,跨库同步数据库表_dblink跨库同步表

dblink跨库同步表


grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to system;//授予建立dblink的权限使用sys帐号授予


create database  link dblink名称(随意)  connect to system identified by manager using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 实例数据库所在的ip地址)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = 实例名称)))';//建立dblink

 

create or replace synonym gy_fileserver_file_mirror_jfxt  //同义词
      for gy_fileserver_file_mirror@dblink名称(已建好的)


create or replace trigger sync_file_mirror_jf     //触发器,增删改查。触发器对分号比较敏感,一般语句后面都要加‘;’
after insert or delete or update
on gy_fileserver_file_mirror
for each row
  
begin
    if inserting then


       delete  gy_fileserver_file_mirror_jfxt where mainid=:new.mainid;  //先删除在insert增加容错率
       insert into gy_fileserver_file_mirror_jfxt (mainid,fileid,dist_format,serverid,v,v_v,createtime,modifytime,creator,modifier,rsextend,mirrortype,cost,pagecount,length,jpgtimes,tiletimes,jpglength) values(:new.mainid,:new.fileid,:new.dist_format,:new.serverid,:new.v,:new.v_v,:new.createtime,:new.modifytime,:new.creator,:new.modifier,:new.rsextend,:new.mirrortype,:new.cost,:new.pagecount,:new.length,:new.jpgtimes,:new.tiletimes,:new.jpglength);


     elsif deleting then
       delete  gy_fileserver_file_mirror_jfxt  where mainid=:old.mainid;


    elsif updating then
      delete gy_fileserver_file_mirror_jfxt where mainid=:old.mainid;   //其实更新和插入可以使用一样的
      insert into gy_fileserver_file_mirror_jfxt (mainid,fileid,dist_format,serverid,v,v_v,createtime,modifytime,creator,modifier,rsextend,mirrortype,cost,pagecount,length,jpgtimes,tiletimes,jpglength) values(:new.mainid,:new.fileid,:new.dist_format,:new.serverid,:new.v,:new.v_v,:new.createtime,:new.modifytime,:new.creator,:new.modifier,:new.rsextend,:new.mirrortype,:new.cost,:new.pagecount,:new.length,:new.jpgtimes,:new.tiletimes,:new.jpglength);
     end if;
     EXCEPTION
       WHEN OTHERS THEN
         dbms_output.put_line('触发器出现异常');//必须捕捉异常,否错网络中断或者主键冲突会导致原表的操作发生数据回滚。

         //当然这个也是和业务是相关的。比如在某些条件下可以做些检查可以使用before。
end;

:new 新建和更新可以用,:old 删除和更新可以用

raise_application_error 抛出异常

一个表上最多可有12个触发器,但同一时间、同一事件、同一类型的触发器只能有一个。并各触发器之间不能有矛盾。

触发器中不能包含事务控制语句(COMMIT,ROLLBACK,SAVEPOINT)。因为触发器是触发语句的一部分,触发语句被提交、回退时,触发器也被提交、回退了。

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/781577
推荐阅读
相关标签
  

闽ICP备14008679号