更新后如何创建触发器来更改记录?

时间:2014-04-04 03:15:21

标签: postgresql triggers plpgsql

触发器有问题。我有简单的表stats。在此表中,我有:idenergyis_alive。我需要创建一个这样的触发器ON UPDATE

CREATE TRIGGER AFTER UPDATE
IF energy <= 0 THEN 
  UPDATE stats SET is_alive = false

当我执行时:

UPDATE stats SET energy = -3 WHERE id = 7

我想:

  1. 更新值 - 3
  2. 执行触发器并检查新值是&lt; = 0
  3. 如果是,则在此记录上更新is_alive = false id = 7
  4. 这可能吗?或者触发器是否必须检查所有表并更改所有表 energy<= 0时的行?

1 个答案:

答案 0 :(得分:3)

这样的触发函数:

CREATE FUNCTION trg_stats_insup_bef()
  RETURNS trigger AS
$func$
BEGIN
IF NEW.energy <= 0 THEN
   NEW.is_alive := FALSE;
END IF;
RETURN NEW;
END
$func$ LANGUAGE plpgsql;

一个triggerBEFORE AFTER):

CREATE TRIGGER insup_bef
BEFORE INSERT OR UPDATE OF energy ON stats  -- covers INSERT, too
FOR EACH ROW
EXECUTE PROCEDURE trg_stats_insup_bef()