触发器未执行但它已创建

时间:2013-03-12 14:42:23

标签: sql postgresql triggers

我有一个触发器功能,我试图在Postgres中执行。

它编译并添加触发器,但它不会像我希望的那样将值插入表中。

它使用的功能如下:

CREATE OR REPLACE FUNCTION
calc_gnpDifference(n integer, o integer)
RETURNS NUMERIC AS $$
        SELECT $1 ::numeric - $2::numeric AS gnpDifference;
$$ LANGUAGE SQL;

触发器部分:

CREATE OR REPLACE FUNCTION autoCalculate() RETURNS TRIGGER AS $$
        BEGIN

        IF NEW.gnp_old > NEW.gnp_old THEN
                NEW.gnpDifference := calc_gnpDifference(NEW.gnp_old, NEW.gnp);
        END IF;

        RETURN NEW;
        END;
$$ LANGUAGE plpgsql;

DROP TRIGGER insertDifference ON country;
CREATE TRIGGER insertDifference BEFORE INSERT ON country
FOR EACH ROW EXECUTE PROCEDURE autoCalculate();

但是,当我插入数据时,触发器不会像我希望的那样更新gnpDifference字段。关于为什么会发生这种情况的想法?

1 个答案:

答案 0 :(得分:5)

显然这种情况:IF NEW.gnp_old > NEW.gnp_old永远不会是真的,所以触发器永远不会有任何影响。