我有点坚持这个。我正在使用触发器,以便在将新数据条目插入VISITED时,它应该更新名为places的表中的visits属性。但是,我不知道如何制作它,以便只在表格PLACES中更新插入行的访问次数。发生了什么事情是整个访问列在PLACES中为每个也在VISITED的地方更新...我尝试使用
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();
答案 0 :(得分:1)
您应该只更新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
(但忽略任何返回值)。