ITPUB个人空间3@!F,`FsY~ }
这几天pub上有人问到db2的关于trigger的操作的问题,抽时间整理了一下!
db2支持表级DML的tirgger!也就是增删改的trigger!这边分别对insert和update做了2个例子
首先看2个表的DDLITPUB个人空间2V*P*@VEi9{
describe table DB2ADMIN.TEST;
列 类型 类型ITPUB个人空间:Uf)p4YGu
名称 模式 名称 长度 小数位 NULLITPUB个人空间,V1l(JBP
UI&b/kO
------------------------------ --------- ------------------ -------- ----- ------ITPUB个人空间 eImn+qY%o
ID SYSIBM INTEGER 4 0 是 ITPUB个人空间,R7Uon'OK?)z
NAME SYSIBM VARCHAR 100 0 是 ITPUB个人空间&hS
tY8H#x7^z
AGE SYSIBM INTEGER 4 0 是
3 条记录已选择。
describe table db2admin.aaaa;
Statement processed successfully in 1.43 secs.
describe table db2admin.aaaa;
rPN
EmH
~I0completed successfully.
列 类型 类型ITPUB个人空间C;cL7g8m,F_#`8i&j{
名称 模式 名称 长度 小数位 NULLITPUB个人空间;c2B!OQJ\f ~
------------------------------ --------- ------------------ -------- ----- ------
roS*l(Jo ^-_0ID SYSIBM INTEGER 4 0 是
M2Y;Fp p y7c,`0TNAME SYSIBM VARCHAR 100 0 是
2J6E)OcO~:g0EVENT SYSIBM INTEGER 4 0 是
3 条记录已选择。
ITPUB个人空间p'Z/s;Uix
一.对于trigger的insert
T,}{#O;B|0drop TRIGGER DB2ADMIN.ZXT_TEST_INSERT;
ITPUB个人空间9eQ$JNIw$_wF#C
SET SCHEMA DB2ADMIN ;
SET CURRENT PATH = "SYSIBM","SYSFUN","SYSPROC","CCP";
CREATE TRIGGER DB2ADMIN.ZXT_TEST_INSERT
~0k9Fu1pYW @0 AFTER INSERT
2p Z8Y2X4BSx.k$Y0 ON DB2ADMIN.TESTITPUB个人空间9SU| U'U2I&K
FOR EACH ROWITPUB个人空间(W I/f.{%K
MODE DB2SQLITPUB个人空间.j,r,J3\Ym
BEGIN ATOMICITPUB个人空间({a@)LY+y7I
declare v_count integer;
j-}D.m5g0 if exists(select t.tname from db2admin.aaaa t where t.tname = 'TEST')
'PG*BkTNzAB;N*E{0 then
,z/w7i7L(| E0 update db2admin.aaaa set event=2 where tname = 'TEST';
\B+|0EU3@-J(n3ENw([0 else
/{wt'J
_;j?2`0 select count(1)+1 from db2admin.aaaa t;ITPUB个人空间-qS(y*p7{y Ko*P_
insert into db2admin.aaaa values(value(v_count,1),'TEST',1);ITPUB个人空间9n5k(L e#j
end if;ITPUB个人空间 g#u&Y%D)g9F%R:z;n
end;ITPUB个人空间 vpd N
UpK2e
commit;
4T/p#j
~p]F)g!P4Z0db2 => alter table DB2ADMIN.TEST activate not logged initially with empty table
8oCTPR`#D[0DB20000I SQL 命令成功完成。ITPUB个人空间0OY3o q l+A;H0p
db2 => alter table db2admin.aaaa activate not logged initially with empty tableITPUB个人空间
_?!eazW
DB20000I SQL 命令成功完成。ITPUB个人空间]~"Unm7k] P^x
db2 => select * from DB2ADMIN.TEST
ID NAME AGE
----------- --------------------- -------
0 条记录已选择。
db2 => select * from db2admin.aaaa
ID TNAME EVENT
----------- ----------------------- -------
0 条记录已选择。
db2 => insert into DB2ADMIN.TEST values (01,'ZXT',25)
!L{5][!O iY0DB20000I SQL 命令成功完成。ITPUB个人空间(l5d,~,lWB,p7w\
db2 => commit
t O:F1A4KU!sO@0DB20000I SQL 命令成功完成。
$k0b8Gn6WbWS0db2 => select * from DB2ADMIN.TEST
ID NAME AGE
----------- --------------------- -------ITPUB个人空间gR*n2[tf!R2u
1 ZXT 25
1 条记录已选择。
db2 => select * from db2admin.aaaa
ID TNAME EVENT
----------- ----------------------- -------
m r(v7o[0 1 TEST 1
1 条记录已选择。
db2 => insert into DB2ADMIN.TEST values (02,'XDL',23)ITPUB个人空间-yF&z?9JKu
DB20000I SQL 命令成功完成。
^S1Uw(RH"s$~4M0db2 => select * from DB2ADMIN.TEST
ID NAME AGE
----------- --------------------- -------
?a^;nf.GZ%Y0 1 ZXT 25ITPUB个人空间,d|E1wI)_
2 XDL 23
2 条记录已选择。
db2 => select * from db2admin.aaaa
ID TNAME EVENT
----------- ----------------------- -------ITPUB个人空间)o)Kz,Cb4KC@
1 TEST 2
1 条记录已选择。
二.关于trigger的update操作
!Q;~2Cjd]0CREATE TRIGGER DB2ADMIN.ZXT_TEST_UPDATEITPUB个人空间x*eMSAA'G
AFTER update
.a_#o*lnP&_ M0 ON DB2ADMIN.TEST
~%Wd2l,?x&^0 REFERENCING OLD AS o NEW AS n
E)wfH&|&uo[0 FOR EACH ROWITPUB个人空间A(J"u.`+P
MODE DB2SQL
,?*s:T&k8Tz
w0 BEGIN ATOMIC
'W3IfW/s
F0 declare v_count integer;
{._Cj#ZT*_"ic[x-|0Z0 if(o.name =n.name) thenITPUB个人空间Y vZ+~S;p:Q)W
insert into db2admin.aaaa values(1000,n.name,1);
w'@5p K&F#o W`A0 elseif(o.age=n.age) then
9KA.AjvWg0 insert into db2admin.aaaa
'sS"|%g&vc0 values(1001,char(integer(n.age)),1);
s1E-g,Eui%]
n0 end if;
]5z
e:FOJp0 end;
ITPUB个人空间
pf#i
@9NM|Mb
db2 => connect to dw
数据库连接信息
数据库服务器 = DB2/NT 8.2.0ITPUB个人空间|.t.@w*q,d1s^
SQL 授权标识 = DB2ADMIN
`x!tn/\-BiS4gA0 本地数据库别名 = DW
db2 => select * from DB2ADMIN.TEST
ID NAME AGE
----------- --------------------- -------ITPUB个人空间:h
i?!}%B"K,@X
V2X2i
1 ZXT 25
l7x%}@/S{3h:K(Ks02 XDL 23
2 条记录已选择。
db2 => select * from db2admin.aaaa
ID TNAME EVENT
----------- ----------------------- -------
4V{$H:u7U01 TEST 2
1 条记录已选择。
db2 => update DB2ADMIN.TEST set name='ZXT1' where id =1
%hf(u(q%e]F j2|0DB20000I SQL 命令成功完成。
A |&c*bo+QQI0db2 => select * from DB2ADMIN.TEST
ID NAME AGE
----------- ------------------------ -------ITPUB个人空间9U@%i(_'m9yR8zX#\
1 ZXT1 25ITPUB个人空间 YjW[v&h}
2 XDL 23
2 条记录已选择。
db2 => select * from db2admin.aaaa
ID TNAME EVENT
----------- ------------------------ -------ITPUB个人空间G#B0nCy]"V.I
1001 25 1ITPUB个人空间7_.g:S1nR^x!f^kW
1 TEST 2
2 条记录已选择。
db2 => update DB2ADMIN.TEST set AGE=23 where id =2ITPUB个人空间:H.L9hJ^0^ffx%OF
DB20000I SQL 命令成功完成。ITPUB个人空间
BDub't8}cM-E'Y
db2 => select * from DB2ADMIN.TEST
ID NAME AGE
----------- ------------------------ -------ITPUB个人空间RQ:q WZ
1 ZXT1 25ITPUB个人空间7t(M_e#SJ
2 XDL 23
2 条记录已选择。
db2 => select * from db2admin.aaaa
ID TNAME EVENT
----------- ------------------------- -------ITPUB个人空间4v-p7[X!Mo6o
1001 25 1ITPUB个人空间N1MyyEJ
1000 XDL 1ITPUB个人空间|+k;C;RD ]3II0^2C,B(f
1 TEST 2
3 条记录已选择。
db2 =>ITPUB个人空间*h5[8l,}[:p
db2 =>ITPUB个人空间!a7HS4w^$zn