2011-09-13 70 views
-1

我有這個表如何在postgresql中創建自動計算字段?

CREATE TABLE game (
    idp     serial NOT NULL, 
    start_pl    integer NOT NULL, 
    finis_pl    integer NOT NULL, 
    points     integer NOT NULL 
    ); 

當我插入或更新列finis_pl,我想自動完成列點。例如,當在finis_pl列中插入編號爲1的列時,我想要在points列中自動插入值15

我做了一個函數使用CASE(因爲我只有16個可能的值插入點),但我不能讓它與觸發器一起工作。

任何想法如何使它工作?

+1

「*無法使其觸發器工作*」不是有效的PostgreSQL錯誤消息。你爲什麼不告訴我們你到目前爲止所嘗試過的? –

+0

是的,觸發是我知道做這種事情的唯一方法。 – 2011-09-13 15:22:29

+0

CREATE OR REPLACE FUNCTION calc() RETURNS trigger AS $ BODY $ DECLARE value game.points%TYPE; BEGIN IF NEW.finish_pl = 1 WHERE game.idp = NEW.idp THEN UPDATE遊戲SET points = 15 WHERE idp = NEW.idp; \t \t END IF; RETURN NEW; END; $ BODY $ LANGUAGE PLPGSQL VOLATILE CREATE TRIGGER tr_calc BEFORE INSERT OR finish_pl OF UPDATE ON遊戲 FOR EACH ROW EXECUTE PROCEDURE計算值(); – alinux

回答

1

而是在數據庫中存儲的冗餘數據(即兩個finish_plpoints),你可以只存儲finish_pl並創建一個觀點,在除了game列也將計算和包括points列。

相關問題