添加/修改日期可能不需要触发器,也许在任何情况下都有适当的函数来设置它们的值:
我的问题是以下字段,
created (timestamp)
updated (timestamp)
createdBy (string, to hold the created by user name)
updatedBy (string, to hold the updated by user name)
如何更改表格,以便在创建和更新时这些字段保存适当的值?
编辑:我现在只需要知道每次访问记录时如何设置updatedBy和更新的时间戳字段。
答案 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>