繁体中文
设为首页
加入收藏
当前位置:技术首页 >> 数据库 >> DB2 >> DB2 9数据库中有关同步trigger的记录

DB2 9数据库中有关同步trigger的记录 (1)

2007-01-01 22:26:00  作者:java的足迹   来源:csdn   浏览次数:188  文字大小:【】【】【

项目需要写了几个数据库同步用的 trigger ,就是记录用户的操作到一个 temp 表,然后每天通过webservice 同步到其它系统,同步成功清空该 temp 表。自认为写的还行,做个记录。是 db2 的。











-- 用户组新增触发器 
--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; 

-- 更新用户组数据的触发器 
- 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; 

-- 如果已经有 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;           
-- 删除用户组触发器
--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;

[1] [2] [3]
点击收藏到

责任编辑:雪焰

本文引用地址: http://tech.itzero.com/2007/0101/12872.html 请粘贴到你的QQ/MSN上推荐给你的好友

相关文章
数据库安全应用 使用MySQL的23个注意事项
如何使Web用户安全的对数据库进行访问
教你配置Linux操作系统安全管理服务
防止ACCESS数据库被下载的几种方法
路由器资料 Cisco 基本检验和配置命令集
将路由器配置为抵御攻击第一道安全屏障
基于NBMA链路类型OSPFv3协议实现方案
Cisco网络教材:Cisco NAT的配置例子
Cisco网络教材:路由器的配置及测试
思科C3550配置DHCP服务器实例
IP路由协议实例配置
 

最新文章

更多

· 基于DB2的数据库应用系统...
· DB2数据库中提高INSERT性...
· DB2数据库中提高INSERT性...
· SQL Server 2005与DB2 8...
· 热点关注:IBM将与微软开...
· 国内学院派专家对DB2 9新...
· 教你如何构建DB2 Cube V...
· DB2数据库创建存储过程时...
· 访问大型机、小型机上DB...
· DB2 9安装方法简介

热点文章

更多

其它推荐