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)。因为触发器是触发语句的一部分,触发语句被提交、回退时,触发器也被提交、回退了。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值