触发更新另一个 table
Trigger update another table
我一直在尝试编写一个触发器函数,当父级更改时更新子级 table 中的行已经有一段时间了。
我已经阅读了触发器过程文档,但我还没有真正掌握如何构建函数。
这是我试过的方法,但不起作用...
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();
有人可以提供一些提示吗?
最好的问候
您不需要在触发函数的主体中使用 parent
table,因为来自父 table 的值在特殊的函数中可用变量 OLD
和 NEW
。在这种情况下,您只需要 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();
我一直在尝试编写一个触发器函数,当父级更改时更新子级 table 中的行已经有一段时间了。 我已经阅读了触发器过程文档,但我还没有真正掌握如何构建函数。
这是我试过的方法,但不起作用...
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();
有人可以提供一些提示吗?
最好的问候
您不需要在触发函数的主体中使用 parent
table,因为来自父 table 的值在特殊的函数中可用变量 OLD
和 NEW
。在这种情况下,您只需要 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();