2013-03-12 4 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은 사실이 아니므로 트리거는 절대로 효과가 없습니다.

관련 문제