视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
数据同步之各站点同步表触发器创建
2020-11-09 14:43:49 责编:小采
文档


在前一个博客中提到了在数据同步的时候,在各站点需要建立各操作表的触发器,在执行增删改的时候,触发器的任务是将其中操作的sql语句拼接成字符串,并保存在表synchro_tb_operate_log中,如果触发器执行出现异常,则将其异常信息保存在另一个表中:SYNCHRO_

在前一个博客中提到了在数据同步的时候,在各站点需要建立各操作表的触发器,在执行增删改的时候,触发器的任务是将其中操作的sql语句拼接成字符串,并保存在表synchro_tb_operate_log中,如果触发器执行出现异常,则将其异常信息保存在另一个表中:SYNCHRO_DATA_EXCEP_LOG,其中

synchro_tb_operate_log字段信息:主键ID、拼接的sql语句(其中包含主键ID和地区代码)、是否完成同步(默认为0未完成)、创建时间

SYNCHRO_DATA_EXCEP_LOG字段信息:主键ID、触发器异常名称、触发器异常信息、触发器异常出现的时间

下面是创建item_rec代码,也可以让我们来学习一下创建触发器相关的语法和知识:

create or replace
TRIGGER "ADMIN"."TRIGGER_ITEM_REC"
 after insert or update or delete
 on ITEM_REC FOR EACH ROW

/** HEAD
 * @name 项目记录表触发器
 * @description 变更事件,形成ddl语句插入同步表中
 * @version 1.0.0
 * @author Tang
 * @create-date 2014-07-01
 */
declare
 v_sql nvarchar2(3000); --临时存放sql
 v_zdcode varchar2(30):='08052'; --站点代码
 v_exception varchar2(500);
begin
 v_sql := null;
 case when inserting then--插入数据
 v_sql := 'insert into ITEM_REC('||
 'ID,PROTEAMNAME,PY,PROID,'||
 'JCTYPE,WORKFLAG,ZXFLAG,JWDCODE)'||
 'values('''||
 :new.ID||''','''||replace(:new.PROTEAMNAME,'''','')||''','''||:new.PY||''','''||:new.PROID||''','''||
 :new.JCTYPE||''','''||:new.WORKFLAG||''','''||:new.ZXFLAG||''','''||v_jwdcode||''')';
 when updating then--更新数据
 v_sql := 'update ITEM_REC set '||
 'PROTEAMNAME='''||replace(:new.PROTEAMNAME,'''','')||''''||
 ',PY='''||:new.PY||''''||
 ',PROID='''||:new.PROID||''''||
 ',JCTYPE='''||:new.JCTYPE||''''||
 ',WORKFLAG='''||:new.WORKFLAG||''''||
 ',ZXFLAG='''||:new.ZXFLAG||''''||
 ' where '||
 'ID='||:old.ID||' and JWDCODE='''||v_jwdcode||'''';
 when deleting then--删除数据
 v_sql := 'delete from ITEM_REC t where t.ID='||:old.ID||' and t.JWDCODE='''||v_jwdcode||'''';
 end case;
 if v_sql is not null then--如果v_sql不为空,则将相应信息插入到synchro_tb_operate_log表中
 insert into
 synchro_tb_operate_log(sd_record_id,sd_record_sql,sd_flag,create_time)
 values(SEQ_SYNCHRO_DATA.NEXTVAL,v_sql,0,to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
 end if;
exception
 when others then--如果执行过程中出现异常,则将异常信息插入到SYNCHRO_DATA_EXCEP_LOG表中
 v_exception := substr(sqlcode||'---'||sqlerrm, 1, 500);
 insert into SYNCHRO_DATA_EXCEP_LOG
 (ID,TRIGGER_NAME,EXCEPTION_INFO,EXCEPTION_TIME)
 values
 (sys_guid(),'Trigger_DICT_PROTEAM',v_exception,to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
end TRIGGER_ITEM_REC;

下载本文
显示全文
专题