2017-06-13 242 views
0

我有兩列表permit_table與列構建器和permit_number weekly_table與列申請人和permit_number。 現在,如果在permit_table的builder列中有任何更新,我需要更新weekly_table的申請者列,其中'old申請人值+新建造者值',如果來自permit_table的更新的建造者值的許可證編號應該與任何許可證編號在weekly_table中。 我曾與下面的觸發嘗試和功能在postgresql更新觸發器後更新從一個表格到另一個表格的值

CREATE OR REPLACE FUNCTION edmonton.automated_builder_update_trigger_manual() 
RETURNS trigger AS 
$BODY$ 
DECLARE 
    e record; 
BEGIN 

EXECUTE format('Update weekly_table as a 
set applicant = old.applicant||new.builder where old.permit_number = 
a.permit_number'); 


RETURN NULL; 
END; 
$BODY$ 
LANGUAGE plpgsql VOLATILE 
COST 100; 
ALTER FUNCTION edmonton.automated_builder_update_trigger_manual() 
OWNER TO postgres; 

和觸發是

CREATE TRIGGER builder_update_trigger_manual 
AFTER UPDATE 
ON edmonton.permit_table 
FOR EACH ROW 
WHEN (old.builder IS DISTINCT FROM new.builder) 
EXECUTE PROCEDURE edmonton.automated_builder_update_trigger_manual(); 

我得到錯誤「FROM子句中缺少的條目表‘老’。

+1

直接寫更新的函數體有OLD *和新*進行插值處理。與將查詢傳遞給不需要插值的'EXECUTE'相反,這與您需要的內容相反,以及爲什麼SQL查找「old」作爲真正的表。 –

+0

謝謝你的工作。 –

回答

0
EXECUTE format('Update weekly_table as a 
set applicant = old.applicant||new.builder where old.permit_number = 
a.permit_number'); 

嘗試更改爲:

EXECUTE format('Update weekly_table as a 
set applicant = ($1).applicant||($2).builder where ($1).permit_number = 
a.permit_number') using old,new; 
+0

感謝您的回覆。我試過這個。它提出了一個錯誤'COLUMN申請人沒有在數據類型permit_table中找到。因爲申請人字段將在weekly_table中可用,而不是在permit_table.Any方式來解決這個問題? –

+0

和丹尼爾斯的建議 - 直接寫更新聲明?應該做的伎倆 –

相關問題