gpt4 book ai didi

sql - PostgreSQL 中触发器函数中的动态查询

转载 作者:行者123 更新时间:2023-11-29 13:03:03 24 4
gpt4 key购买 nike

我试图在触发器函数中执行动态查询,但我一直收到 Missing FROM-clause entry for table "new"

为什么会出现错误,我该如何解决?

CREATE OR REPLACE FUNCTION "Site"."UpdateAncestorModified"()
RETURNS trigger AS
$BODY$BEGIN
EXECUTE
format
('
UPDATE
"' || TG_TABLE_SCHEMA || '"."' || TG_TABLE_NAME || '"
SET
modified = NEW.modified
WHERE
id = NEW."ancestorId"
AND
modified <> NEW.modified
')
USING
NEW;
RETURN NEW;
END$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

最佳答案

我必须将 NEW 更改为 ($1),因为它是对第一个绑定(bind)参数的引用。

正确的查询是:

CREATE OR REPLACE FUNCTION "Site"."UpdateAncestorModified"()
RETURNS trigger AS
$BODY$BEGIN
EXECUTE
format
('
UPDATE
"' || TG_TABLE_SCHEMA || '"."' || TG_TABLE_NAME || '"
SET
modified = ($1).modified
WHERE
id = ($1)."ancestorId"
AND
modified <> ($1).modified
')
USING
NEW;
RETURN NEW;
END$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

关于sql - PostgreSQL 中触发器函数中的动态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23116111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com