2013-03-12 72 views
0

我有一个触发器函数我试图在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场我所希望的。关于为什么会发生这种情况的想法?

回答

5

显然这个条件:IF NEW.gnp_old > NEW.gnp_old永远不会是真的,所以触发器永远不会有任何效果。