在SQL编译中更新后触发但似乎不会触发

时间:2014-03-14 05:22:13

标签: sql function postgresql triggers

我有一个触发器,在对同一行中的记录进行更新后,应该更新某个列Points。为此,我创建了一系列函数calc_extrapointcalc_fieldgoalpoint来促进这一过程。当手动运行时,这两个函数都可以工作并返回正确的值。

但是,当我尝试在更新表格后触发触发器时,ExtraPointFieldGoal列很可能会发生Points列未更新为我期待。

例如,在我的表中,每个记录的所有值分别对于点,额外点和字段目标列的0,0,0开始。当我更新额外的点列虽然说2,我希望点列为2.如果我这次再次更新,字段目标点为2,我希望我的点列设置为8.

create or replace function calc_points() returns trigger as $$
    begin
        NEW."Points" :=  calc_extrapoint(NEW."ExtraPoint") + calc_fieldgoalpoint(NEW."FieldGoal");
    return NEW;
    end
$$ LANGUAGE plpgsql;

DROP TRIGGER calc_points on playerdata;
CREATE TRIGGER calc_points AFTER UPDATE ON playerdata
FOR EACH ROW EXECUTE PROCEDURE calc_points();

触发器和函数都进行了适当的编译,但没有按预期触发。是否有一些我缺少的东西来完成这个动作?

1 个答案:

答案 0 :(得分:2)

修改NEW触发器中的AFTER无法执行任何操作。该行已经写好了。在那里放一个RAISE NOTICE 'Trigger fired';;你会收到通知。只是触发器触发,但什么都不做。

这就是为什么我们有BEFORE个触发器。如果要修改要写入表的行,则必须使用BEFORE触发器。