我有两列表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子句中缺少的条目表‘老’。
直接写更新的函数体有OLD *和新*进行插值处理。与将查询传递给不需要插值的'EXECUTE'相反,这与您需要的内容相反,以及为什么SQL查找“old”作为真正的表。 –
谢谢你的工作。 –