插入后为当前时间戳更新创建触发器

时间:2018-07-05 21:11:45

标签: sql db2 database-trigger

我正在尝试通过以下方式创建档案。创建了我要从中存档的表的副本,并添加了一个名为DATA_PERIOD的列。我的想法是创建一个触发器,在此表中插入原始表中的数据后,将使用current_timestamp更新DATA_PERIOD。这是我编写的代码。

CREATE TRIGGER ORDERS_SUMMARY_ARCHIVE
AFTER INSERT ON GDTS.ORDERS_SUMMARY_A
FOR EACH ROW
WHEN (DATA_PERIOD IS NULL)
UPDATE GDTS.ORDERS_SUMMARY_A SET DATA_PERIOD = CURRENT_TIMESTAMP

因此,在填充表时,将插入时间戳。

不确定是否有更好的方法可以做到这一点。我已经在知识书中找到了该陈述,并试图使其适应我的需求,但没有成功。

  

“ DATA_PERIOD”在使用上下文中无效。SQLCODE = -206,SQLSTATE = 42703,DRIVER = 3.68.61

在这种情况下我需要某种形式的对表的引用吗?

谢谢

2 个答案:

答案 0 :(得分:1)

我认为您想要一个before插入触发器。如果我拥有正确的DB2语法:

CREATE TRIGGER ORDERS_SUMMARY_ARCHIVE BEFORE INSERT ON GDTS.ORDERS_SUMMARY_A
FOR EACH ROW WHEN (DATA_PERIOD IS NULL)
    SET DATA_PERIOD = CURRENT_TIMESTAMP;

答案 1 :(得分:1)

按照Gordon Linoff的建议在插入触发器之前使用。新记录的引用变量应在触发器标题部分中定义。

CREATE TRIGGER ORDERS_SUMMARY_ARCHIVE BEFORE INSERT ON GDTS.ORDERS_SUMMARY_A REFERENCING NEW AS N FOR EACH ROW WHEN (N.DATA_PERIOD IS NULL) BEGIN ATOMIC SET N.DATA_PERIOD = CURRENT_TIMESTAMP; END