2013-03-06 119 views
0

我必須在postgresql中創建觸發器(不帶任何函數調用)。我有兩個表LivesIn(PID,名稱,省)和地方(姓名,省份,人口,mayorid)Postgresql:創建觸發器

我有以下代碼:

CREATE TRIGGER updatePopulation 
AFTER INSERT ON LivesIn 
FOR EACH ROW 
UPDATE Places 
SET NEW.population = OLD.Population + 1 
WHERE LivesIn.name = Places.name AND LiveIn.province = Places.province; 

我收到以下錯誤: PSQL: /home/2008/uehtes/Desktop/Comp421/comp421_a2_q1.sql:111:錯誤:在語法錯誤或接近 「UPDATE」 5行:UPDATE Places.population ^

任何幫助將非常感激。

回答

1

@Glenn,顯然不是這樣做的方式。您必須創建一個函數並在觸發器中調用它。像這樣:

CREATE FUNCTION updatePop() RETURNS TRIGGER AS $updatePopulation$ 
DECLARE 
    name1 varchar(30); 
    name2 varchar(30); 
BEGIN 
    IF (TG_OP = 'INSERT') THEN 
     name1 = NEW.name; 
     name2 = NEW.province; 
     UPDATE Place 
     SET population = population + 1 
     WHERE name1 = Place.name AND name2 = Place.province; 
END IF; 
RETURN NULL;  
END; 
$updatePopulation$ LANGUAGE plpgsql; 

CREATE TRIGGER updatePopulation 
AFTER INSERT ON LivesIn 
FOR EACH ROW 
EXECUTE PROCEDURE updatePop();