DB2 iSeries触发器用于添加&修改后的时间戳和用户字段

时间:2011-04-29 19:41:54

标签: db2 ibm-midrange

添加/修改日期可能不需要触发器,也许在任何情况下都有适当的函数来设置它们的值:

我的问题是以下字段,

created (timestamp)
updated (timestamp)
createdBy (string, to hold the created by user name)
updatedBy (string, to hold the updated by user name)

如何更改表格,以便在创建和更新时这些字段保存适当的值?

编辑:我现在只需要知道每次访问记录时如何设置updatedBy和更新的时间戳字段。

1 个答案:

答案 0 :(得分:3)

创建下表以供参考:

create table test(                    
  id integer generated always as identity,    
  content char(60),                           
  createdBy char(30) default user,            
  created timestamp default current timestamp,
  updatedBy char(30),                         
  updated timestamp default null,             
  primary key(id)                             
)   

这个表有一个自动递增的主键(id),一个在insert上设置的createdBy字段,一个在插入时设置的创建时间戳现在我们只需要触发器使最后两个按预期工作(有一个新的功能设置更新更新而不使用触发器,但该功能似乎不允许空值显示记录从未更新,因此对我不起作用。)

insert into test (content) VALUES ('first thing'),
  ('second thing')      

要查看已设置created和createdBy的默认值:

select * from test

添加更新触发器:

CREATE TRIGGER mytrigger                   
  NO CASCADE BEFORE UPDATE ON test 
  REFERENCING NEW AS post                  
FOR EACH ROW MODE DB2ROW                   
SET                                        
 post.updated = CURRENT TIMESTAMP,         
 post.updatedBy = USER  

要查看上述内容是否有效,我们可以更新“内容”中的值:

update co05arh/test
  set content = 'first thing updated'
  where id = 1

查看新的默认值

select * from co05arh/test

然后我们应该看到像

这样的东西
ID  CONTENT                 CREATEDBY   CREATED                     UPDATEDBY   UPDATED
1   first thing updated     KEN         2011-04-29 16:16:17.942429  KEN         2011-04-29 16:16:28.649543
2   second thing            KEN         2011-04-29 16:16:18.01629   <null>      <null>