linux下db2查看具体触发器,[原]db2关于trigger的常用操作!

这几天pub上有人问到db2的关于trigger的操作的问题,抽时间整理了一下!

db2支持表级DML的tirgger!也就是增删改的trigger!这边分别对insert和update做了2个例子

首先看2个表的DDLdescribe table  DB2ADMIN.TEST;

列                             类型      类型

名称                           模式      名称               长度     小数位  NULL

------------------------------ --------- ------------------ -------- ----- ------

ID                             SYSIBM    INTEGER                   4     0 是

NAME                           SYSIBM    VARCHAR                 100     0 是

AGE                            SYSIBM    INTEGER                   4     0 是

3 条记录已选择。

describe table  db2admin.aaaa;

Statement processed successfully in 1.43 secs.

describe table  db2admin.aaaa;

completed successfully.

列                             类型      类型

名称                           模式      名称               长度     小数位  NULL

------------------------------ --------- ------------------ -------- ----- ------

ID                             SYSIBM    INTEGER                   4     0 是

TNAME                          SYSIBM    VARCHAR                 100     0 是

EVENT                          SYSIBM    INTEGER                   4     0 是

3 条记录已选择。

一.对于trigger的insert

drop TRIGGER DB2ADMIN.ZXT_TEST_INSERT;

SET SCHEMA DB2ADMIN     ;

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

CREATE TRIGGER DB2ADMIN.ZXT_TEST_INSERT

AFTER  INSERT

ON DB2ADMIN.TEST

FOR EACH ROW

MODE DB2SQL

BEGIN ATOMIC

declare v_count integer;

if exists(select t.tname from  db2admin.aaaa  t where t.tname = 'TEST')

then

update  db2admin.aaaa set event=2 where tname = 'TEST';

else

select count(1)+1  from db2admin.aaaa t;

insert into db2admin.aaaa values(value(v_count,1),'TEST',1);

end if;

end;

commit;

db2 => alter table  DB2ADMIN.TEST activate not logged initially with empty table

DB20000I  SQL 命令成功完成。

db2 => alter table  db2admin.aaaa activate not logged initially with empty table

DB20000I  SQL 命令成功完成。

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)

DB20000I  SQL 命令成功完成。

db2 => commit

DB20000I  SQL 命令成功完成。

db2 => select * from DB2ADMIN.TEST

ID          NAME                  AGE

----------- --------------------- -------

1 ZXT                   25

1 条记录已选择。

db2 => select * from db2admin.aaaa

ID          TNAME                   EVENT

----------- ----------------------- -------

1 TEST                    1

1 条记录已选择。

db2 => insert into DB2ADMIN.TEST values (02,'XDL',23)

DB20000I  SQL 命令成功完成。

db2 => select * from DB2ADMIN.TEST

ID          NAME                  AGE

----------- --------------------- -------

1 ZXT                   25

2 XDL                   23

2 条记录已选择。

db2 => select * from db2admin.aaaa

ID          TNAME                   EVENT

----------- ----------------------- -------

1 TEST                    2

1 条记录已选择。

二.关于trigger的update操作

CREATE TRIGGER DB2ADMIN.ZXT_TEST_UPDATE

AFTER update

ON DB2ADMIN.TEST

REFERENCING OLD AS o NEW AS n

FOR EACH ROW

MODE DB2SQL

BEGIN ATOMIC

declare v_count integer;

if(o.name =n.name) then

insert into db2admin.aaaa values(1000,n.name,1);

elseif(o.age=n.age) then

insert into db2admin.aaaa

values(1001,char(integer(n.age)),1);

end if;

end;

db2 => connect to dw

数据库连接信息

数据库服务器         = DB2/NT 8.2.0

SQL 授权标识         = DB2ADMIN

本地数据库别名       = DW

db2 => select * from DB2ADMIN.TEST

ID          NAME                  AGE

----------- --------------------- -------

1           ZXT                   25

2           XDL                   23

2 条记录已选择。

db2 =>   select * from db2admin.aaaa

ID          TNAME                   EVENT

----------- ----------------------- -------

1           TEST                    2

1 条记录已选择。

db2 =>   update DB2ADMIN.TEST set name='ZXT1' where id =1

DB20000I  SQL 命令成功完成。

db2 =>   select * from DB2ADMIN.TEST

ID          NAME                     AGE

----------- ------------------------ -------

1           ZXT1                     25

2           XDL                      23

2 条记录已选择。

db2 =>   select * from db2admin.aaaa

ID          TNAME                    EVENT

----------- ------------------------ -------

1001        25                       1

1           TEST                     2

2 条记录已选择。

db2 =>   update DB2ADMIN.TEST set AGE=23 where id =2

DB20000I  SQL 命令成功完成。

db2 =>   select * from DB2ADMIN.TEST

ID          NAME                     AGE

----------- ------------------------ -------

1           ZXT1                     25

2           XDL                      23

2 条记录已选择。

db2 =>   select * from db2admin.aaaa

ID          TNAME                     EVENT

----------- ------------------------- -------

1001        25                        1

1000        XDL                       1

1           TEST                      2

3 条记录已选择。

db2 =>

db2 =>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值