插入触发器后的Firebird - 将时间戳插入插入的行

时间:2014-09-01 17:07:46

标签: firebird database-trigger

我有一个字段是"时间戳"类型,称为" inserted_when"。 如何在插入后更新此字段(插入时间戳)(因此它仅适用于选定的插入记录)?通过触发当然...... 编辑:

我尝试了这个,但似乎无法使未注释的部分起作用。

SET TERM ^ ;
CREATE TRIGGER AFTER_INSERT FOR MYTABLE
ACTIVE AFTER INSERT POSITION 1
AS
BEGIN
      UPDATE MYTABLE 
      SET MYTABLE.inserted_when = current_timestamp;

   ---- where mytable.ID = Inserted.ID
END^

SET TERM ; ^

3 个答案:

答案 0 :(得分:4)

要更新正在插入的记录,您需要使用BEFORE UPDATE触发器,而不是AFTER UPDATE触发器。可以通过NEW上下文变量访问(和更新)要插入的行的值(还有一个OLD上下文变量,但这与插入触发器无关)。请注意,Firebird会触发每行触发。

因此您需要将触发器更改为:

CREATE TRIGGER BEFORE_INSERT_MYTABLE FOR MYTABLE
ACTIVE BEFORE INSERT
AS
BEGIN
      NEW.inserted_when = current_timestamp;
END

请注意,OLD上下文变量永远不可修改,NEW上下文变量只能在BEFORE触发器中修改。

答案 1 :(得分:3)

您只能更新BEFORE UPDATE触发器中要更新的字段。

在触发器中,您可以执行以下操作:

new.inserted_when = current_timestamp;

为每个更新的记录调用触发器。

如果您在UPDATE MYTABLE中执行AFTER UPDATE,则可能会无限循环。

答案 2 :(得分:1)

或者只有CURRENT_TIMESTAMP

的inserted_when列的默认值

不需要触发器