ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [原]db2关于trigger的常用操作!

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

原创 Linux操作系统 作者:myfriend2010 时间:2019-06-12 11:30:05 0 删除 编辑


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

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

首先看2个表的DDL
describe 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 =>

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/694276/viewspace-202028/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-09-01

  • 博文量
    187
  • 访问量
    126702