2015-10-09 196 views
0

我一直在試圖編寫一個觸發器函數來更新父表被更改一段時間後的子表中的行。 我已閱讀觸發程序文檔,但我沒有真正掌握如何構建函數。觸發器更新另一個表

這是我已經試過不行......

CREATE FUNCTION myschema.update_child() RETURNS trigger AS 
$BODY$ 
BEGIN 
UPDATE myschema.child 
set new.number = parent.number 
FROM myschema.parent 
WHERE id = "id"; 
RETURN NEW; 
END 
$BODY$ 
LANGUAGE plpgsql 

則觸發

CREATE TRIGGER update_child_after_update 
    AFTER INSERT OR UPDATE OR DELETE 
    ON myschema.child 
    FOR EACH ROW 
    EXECUTE PROCEDURE myschema.update_child(); 

沒有人有一些提示給?
最好的問候

+0

你想更新僅在父記錄被更新子表?想要關於INSERT或DELETE?你想讓孩子始終與父母同步嗎? –

+0

由於我工作的數據庫的結構,我只需要在這種情況下更新子表 – geogrow

回答

2

你並不需要使用parent表中觸發功能的身體,因爲從父表中的值的特殊變量OLDNEW在功能可用。在這種情況下,您只需要NEW

如果您需要觸發僅在更新,比定義一個只更新觸發:

CREATE or replace FUNCTION update_child() RETURNS trigger AS 
    $BODY$ 
BEGIN 
    UPDATE child 
    set number = NEW.number 
    WHERE id = NEW.id; 
    RETURN NEW; 
END 
$BODY$ 
LANGUAGE plpgsql; 

CREATE TRIGGER update_child_after_update 
AFTER UPDATE 
ON parent 
FOR EACH ROW 
EXECUTE PROCEDURE update_child(); 
+0

謝謝!這工作就像我希望的一樣,感謝讓我的概念更清晰,將更多地瞭解這一點,並牢記在心:) – geogrow

相關問題