gpt4 book ai didi

database - 使用触发器更新基于另一个表插入的表行?

转载 作者:搜寻专家 更新时间:2023-10-30 23:30:13 26 4
gpt4 key购买 nike

我有点卡在这上面。我正在使用触发器,以便在将新数据条目插入 VISITED 时,它应该更新名为 places 的表中的 visits 属性。但是,我不知道如何做到只有插入行的访问在表 PLACES 中更新。发生的事情是,对于也在 VISITED 中的每个地方,整个 visits 列在 PLACES 中得到更新......我尝试使用

SET NEW.visits = visits + 1

但后来我收到一个错误,说新的无法识别...有什么想法/建议吗? :(

CREATE OR REPLACE FUNCTION log_visits() RETURNS TRIGGER AS $BODY$
BEGIN
UPDATE places
SET visits = visits + 1
FROM visited WHERE(places.name = visited.name AND
places.borough = visited.borough);
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;


CREATE TRIGGER trigger_visits AFTER INSERT ON visited
FOR EACH ROW EXECUTE PROCEDURE
log_visits();

最佳答案

您应该只更新 new 指向的行:

create or replace function log_visits() 
returns trigger as $body$
begin
update places
set visits = visits + 1
where places.name = new.name
and places.borough = new.borough;
return null;
end;
$body$
language plpgsql;

顺便说一句,插入后的触发器应该返回 null(尽管忽略任何返回值)。

DbFiddle. 中测试它

关于database - 使用触发器更新基于另一个表插入的表行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50068821/

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