數(shù)據(jù)庫同步trigger的記錄

          ??? 項目需要寫了幾個數(shù)據(jù)庫同步用的 trigger ,就是記錄用戶的操作到一個 temp 表,然后每天通過 webservice 同步到其它系統(tǒng),同步成功清空該 temp 表。自認為寫的還行,做個記錄。是 db2 的。

          ?

          -- 用戶組新增觸發(fā)器

          --DROP TRIGGER TG_USERG;

          CREATE TRIGGER LIBING.TG_USERG AFTER INSERT ON LIBING.TM_USERG

          ? REFERENCING NEW AS NROW

          ? FOR EACH ROW

          ? MODE DB2SQL??

          ? BEGIN ATOMIC

          ?

          ? declare @groupId integer;

          ? declare @name varchar(30);

          ? declare @descn varchar(100);

          ? declare @syntype varchar(4);

          ? declare @ddlsql varchar(1024);

          ? declare @isprimary char(1);

          ? declare @updateTime timestamp;

          ? declare @createTime timestamp;

          ? declare @createBy integer;

          ? declare @updateBy integer;

          ? declare @groupType integer;

          ? declare @adminType integer;

          ? declare @appId integer;

          ?

          ? declare @oldGroupId integer;

          ?

          ? set @groupId=NROW.GROUP_ID;

          ? set @name=NROW.name;

          ? set @descn=NROW.descn;

          ? set @syntype=NROW.syn_type;

          ? set @ddlsql=NROW.ddlsql;

          ? set @isprimary=NROW.isprimary;

          ? set @updateTime=NROW.update_time;

          ? set @createTime=NROW.create_time;

          ? set @createBy=NROW.create_by;

          ? set @updateBy=NROW.update_by;

          ? set @groupType=NROW.group_type;

          ? set @adminType=NROW.admin_type;

          ? set @appId=NROW.app_id;

          ?

          ? INSERT INTO TM_USERG_TEMP(GROUP_ID,NAME,DESCN,DDLSQL,ISPRIMARY,UPDATE_TIME,CREATE_TIME,

          ? ?????????? ?CREATE_BY,UPDATE_BY,GROUP_TYPE,ADMIN_TYPE,APP_ID,ACTION) VALUES (@groupId,@name,@descn,

          ????????????? ?@ddlsql,@isprimary,@updateTime,@createTime,@createBy,@updateBy,@groupType,@adminType,@appId,'INSERT');

          ? END;

          ?

          ? -- 更新用戶組數(shù)據(jù)的觸發(fā)器

          ?-- DROP TRIGGER TG_USERG_UPDATE;

          ? CREATE TRIGGER TG_USERG_UPDATE AFTER UPDATE ON TM_USERG

          ? ?????????? ?REFERENCING NEW AS NROW

          ????????????? ?FOR EACH ROW

          ????????????? ?MODE DB2SQL

          ????????????? ?BEGIN ATOMIC

          ????????????? ?

          ????????????? ?declare @groupId integer;

          ? ?????????? ?declare @name varchar(30);

          ? ?????????? ?declare @descn varchar(100);

          ? ?????????? ?declare @syntype varchar(4);

          ? ?????????? ?declare @ddlsql varchar(1024);

          ? ?????????? ?declare @isprimary char(1);

          ? ?????????? ?declare @updateTime timestamp;

          ? ?????????? ?declare @createTime timestamp;

          ? ?????????? ?declare @createBy integer;

          ? ?????????? ?declare @updateBy integer;

          ? ?????????? ?declare @groupType integer;

          ? ?????????? ?declare @adminType integer;

          ? ?????????? ?declare @appId integer;

          ????????????? ?

          ????????????? ?set @groupId=NROW.GROUP_ID;

          ? ?????????? ?set @name=NROW.name;

          ? ?????????? ?set @descn=NROW.descn;

          ? ?????????? ?set @syntype=NROW.syn_type;

          ? ?????????? ?set @ddlsql=NROW.ddlsql;

          ? ?????????? ?set @isprimary=NROW.isprimary;

          ? ?????????? ?set @updateTime=NROW.update_time;

          ? ?????????? ?set @createTime=NROW.create_time;

          ? ?????????? ?set @createBy=NROW.create_by;

          ? ?????????? ?set @updateBy=NROW.update_by;

          ? ?????????? ?set @groupType=NROW.group_type;

          ? ?????????? ?set @adminType=NROW.admin_type;

          ? ?????????? ?set @appId=NROW.app_id;

          ????????????? ?

          ????????????? ?-- 如果已經(jīng)有 update 則只記錄最后一條 update

          ????????????? ?IF EXISTS(SELECT GROUP_ID FROM TM_USERG_TEMP WHERE GROUP_ID=@groupId AND ACTION='UPDATE') THEN

          ????????????? ? ???? UPDATE TM_USERG_TEMP SET GROUP_ID=@groupId,

          ????????????? ? ???? ? ??????????? NAME=@name,DESCN=@descn,DDLSQL=@ddlsql,

          ?????????????????????????????????? ISPRIMARY=@isprimary,UPDATE_TIME=@updateTime,

          ?????????????????????????????????? CREATE_TIME=@createTime,CREATE_BY=@createBy,

          ?????????????????????????????????? UPDATE_BY=@updateBy,GROUP_TYPE=@groupType,

          ?????????????????????????????????? ADMIN_TYPE=@adminType,APP_ID=@appId,ACTION='UPDATE'

          ?????????????????????????????????? where GROUP_ID=@groupId AND ACTION='UPDATE';

          ????????????? ?-- 如果有 insert 則把后面的 update 當作 insert

          ????????????? ELSEIF? EXISTS(SELECT GROUP_ID FROM TM_USERG_TEMP WHERE GROUP_ID=@groupId AND ACTION='INSERT') THEN

          ???????????????????? UPDATE TM_USERG_TEMP SET GROUP_ID=@groupId,

          ????????????? ? ???? ? ??????????? NAME=@name,DESCN=@descn,DDLSQL=@ddlsql,

          ?????????????????????????????????? ISPRIMARY=@isprimary,UPDATE_TIME=@updateTime,

          ?????????????????????????????????? CREATE_TIME=@createTime,CREATE_BY=@createBy,

          ?????????????????????????????????? UPDATE_BY=@updateBy,GROUP_TYPE=@groupType,

          ?????????????????????????????????? ADMIN_TYPE=@adminType,APP_ID=@appId,ACTION='INSERT'

          ?????????????????????????????????? where GROUP_ID=@groupId AND ACTION='INSERT';

          ????????????? ELSE????? INSERT INTO TM_USERG_TEMP(GROUP_ID,NAME,DESCN,DDLSQL,ISPRIMARY,UPDATE_TIME,CREATE_TIME,

          ? ?????????? ? ??????????? ???CREATE_BY,UPDATE_BY,GROUP_TYPE,ADMIN_TYPE,APP_ID,ACTION) VALUES (@groupId,@name,@descn,

          ????????????? ? ??????????? ?? @ddlsql,@isprimary,@updateTime,@createTime,@createBy,@updateBy,@groupType,@adminType,@appId,'UPDATE');

          ????????????? end if;

          ????????????? ?END;??????????

          ?

          ?

          -- 刪除用戶組觸發(fā)器

          --DROP TRIGGER TG_USERG_DELETE;

          CREATE TRIGGER TG_USERG_DELETE AFTER DELETE ON TM_USERG

          ?????? ? REFERENCING OLD AS OROW

          ?????? ? FOR EACH ROW

          ?????? ? MODE DB2SQL

          ?????? ? BEGIN ATOMIC

          ?????? ?

          ?????? ? declare @groupId integer;

          ? ??? ??declare @name varchar(30);

          ? ??? ??declare @descn varchar(100);

          ? ??? ??declare @syntype varchar(4);

          ? ??? ??declare @ddlsql varchar(1024);

          ? ??? ??declare @isprimary char(1);

          ? ??? ??declare @updateTime timestamp;

          ? ??? ??declare @createTime timestamp;

          ? ??? ??declare @createBy integer;

          ? ??? ??declare @updateBy integer;

          ? ??? ??declare @groupType integer;

          ? ??? ??declare @adminType integer;

          ? ??? ??declare @appId integer;

          ????????????? ?

          ?????? ? set @groupId=OROW.GROUP_ID;

          ? ??? ??set @name=OROW.name;

          ? ??? ??set @descn=OROW.descn;

          ? ??? ??set @syntype=OROW.syn_type;

          ? ??? ??set @ddlsql=OROW.ddlsql;

          ? ??? ??set @isprimary=OROW.isprimary;

          ? ??? ??set @updateTime=OROW.update_time;

          ? ??? ??set @createTime=OROW.create_time;

          ? ??? ??set @createBy=OROW.create_by;

          ? ??? ??set @updateBy=OROW.update_by;

          ? ??? ??set @groupType=OROW.group_type;

          ? ??? ??set @adminType=OROW.admin_type;

          ? ??? ??set @appId=OROW.app_id;

          ?????? ?

          ?????? ?? -- 如果沒有操作記錄,則插入 delete 記錄

          ?????? ?? IF NOT EXISTS(SELECT GROUP_ID FROM TM_USERG_TEMP WHERE GROUP_ID=@groupId) THEN

          ?????? ?? ? ??INSERT INTO TM_USERG_TEMP(GROUP_ID,NAME,DESCN,DDLSQL,ISPRIMARY,UPDATE_TIME,CREATE_TIME,

          ? ?????????? ?CREATE_BY,UPDATE_BY,GROUP_TYPE,ADMIN_TYPE,APP_ID,ACTION) VALUES (@groupId,@name,@descn,

          ????????????? ?@ddlsql,@isprimary,@updateTime,@createTime,@createBy,@updateBy,@groupType,@adminType,@appId,'DELETE');

          ????????????? ?

          ????????????? ?-- 如果有 insert 記錄,則整體結果相當于沒有進行任何操作

          ????????????? ?ELSEIF EXISTS(SELECT GROUP_ID FROM TM_USERG_TEMP WHERE GROUP_ID=@groupId and ACTION='INSERT') THEN

          ????????????? ? ??????????? DELETE FROM TM_USERG_TEMP WHERE GROUP_ID=@groupId and ACTION='INSERT';

          ????????????? ?-- 如果沒有 insert 記錄,則只需記錄最后的 delete 操作

          ????????????? ?ELSE

          ????????????? ? ???? ? UPDATE TM_USERG_TEMP set ACTION='DELETE' where GROUP_ID=@groupId;

          ?????? ?? END IF;

          ?????? ??

          ?????? ?? END;

          posted on 2006-10-30 17:06 pesome 閱讀(1412) 評論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          <2006年10月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導航

          統(tǒng)計

          公告

          主要記錄作者在學習java中的每一步足跡。除非特別說明,所有文章均為本blog作者原創(chuàng),如需轉載請注明出處和原作者,如用于商業(yè)目的,需跟作者本人聯(lián)系。
          歡迎大家訪問:

          常用鏈接

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          java技術

          人間百態(tài)

          朋友們的blog

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 寿宁县| 五峰| 乌拉特中旗| 岚皋县| 雷波县| 宁明县| 阳信县| 兴业县| 汝州市| 车险| 西乡县| 长垣县| 安徽省| 镇赉县| 康保县| 金沙县| 涟水县| 清河县| 合川市| 堆龙德庆县| 钟祥市| 金昌市| 托里县| 赣榆县| 德化县| 许昌县| 湖州市| 慈利县| 西昌市| 江油市| 从化市| 白水县| 南漳县| 西昌市| 同江市| 徐闻县| 德保县| 汝阳县| 岳阳市| 武汉市| 仁怀市|