天地不仁,以万物为刍狗!

[原]db2关于trigger的常用操作!

上一篇 / 下一篇  2008-03-11 09:13:11 / 个人分类:db2

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个人空间 eIm n+qY%o
ID                             SYSIBM    INTEGER                   4     0 是   ITPUB个人空间,R7U on'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;F pp y7c,`0TNAME                          SYSIBM    VARCHAR                 100     0 是   
2J6E)Oc O~:g0EVENT                          SYSIBM    INTEGER                   4     0 是   

  3 条记录已选择。

ITPUB个人空间p'Z/s;Uix
一.对于trigger的insert
T,}{#O;B|0drop TRIGGER DB2ADMIN.ZXT_TEST_INSERT;

ITPUB个人空间9eQ$J NIw$_wF#C
SET SCHEMA DB2ADMIN     ;

SET CURRENT PATH = "SYSIBM","SYSFUN","SYSPROC","CCP";

CREATE TRIGGER DB2ADMIN.ZXT_TEST_INSERT
~0k9Fu1pYW @0  AFTER  INSERT
2pZ8Y2X4BSx.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*B kTNzAB;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{yKo*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个人空间0OY3oq l+A;H0p
db2 => alter table  db2admin.aaaa activate not logged initially with empty tableITPUB个人空间 _?!eazW
DB20000I  SQL 命令成功完成。ITPUB个人空间]~"Un m7k]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 命令成功完成。
$k0b8Gn6Wb WS0db2 => select * from DB2ADMIN.TEST

ID          NAME                  AGE

----------- --------------------- -------ITPUB个人空间g R*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*eMS AA'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个人空间 p f#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 ]3I I0^2C,B(f
1           TEST                      2

  3 条记录已选择。

db2 =>ITPUB个人空间*h5[8l,}[:p
db2 =>ITPUB个人空间!a7HS4w^$zn


TAG:

efan101的个人空间 引用 删除 efan101   /   2008-07-24 15:55:15
原帖由efan101于2008-07-24 15:53:28发表

点错了
efan101的个人空间 引用 删除 efan101   /   2008-07-24 15:54:08
好想知道删除的trigger怎么写。
efan101的个人空间 引用 删除 efan101   /   2008-07-24 15:53:28
1
引用 删除 Guest   /   2008-04-22 13:53:45
-5
引用 删除 fdsfdsfsfs   /   2008-03-31 16:22:57
引用 删除 fdsfdsfsfs   /   2008-03-31 16:22:26
fsdffsfdsfss
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-11-24  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

数据统计

  • 访问量: 12228
  • 日志数: 273
  • 图片数: 1
  • 文件数: 2
  • 建立时间: 2007-12-01
  • 更新时间: 2008-11-19

RSS订阅

Open Toolbar