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

DB2 iSeries触发器用于添加&;修改的时间戳和用户字段,db2,ibm-midrange,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) 如何更改表,以便在创建和更新这些字段时保存适当的值 编辑:我现在只需要知道如何在每次访问记录时设置upd

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

我的问题是关于以下领域

created (timestamp)
updated (timestamp)
createdBy (string, to hold the created by user name)
updatedBy (string, to hold the updated by user name)
如何更改表,以便在创建和更新这些字段时保存适当的值


编辑:我现在只需要知道如何在每次访问记录时设置updatedBy和updated timestamp字段。

创建下表以供参考:

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上设置的已创建时间戳。现在我们只需要触发器使最后两个按预期工作(有一个新功能可以在不使用触发器的情况下设置updated-on-update,但该功能似乎不允许空值来显示记录从未更新过,因此这对我不起作用)

要查看已设置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  
要查看上述操作是否有效,请更新“内容”中的值:

查看新的默认值

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>
ID内容由创建更新由更新创建
第一件事更新了KEN 2011-04-29 16:16:17.942429 KEN 2011-04-29 16:16:28.649543
第二件事肯2011-04-29 16:16:18.01629

好的,我看到创建的字段仅通过使用时间戳来处理,默认值是插入时间。一个向下…“createdBy CHAR(30)default USER”处理createdBy字段…还有两个。本教程回答了我的datetime触发器问题,我可能会在稍后自我回答。。。
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>