使用 TRIGGER 根据另一个 table 插入更新 table 行?
Update a table row based on another table insert using a TRIGGER?
我有点卡在这上面。我正在使用触发器,以便在将新数据条目插入 VISITED 时,它应该更新 table 调用位置中的 visits 属性。但是,我不知道如何才能在 table PLACES 中只更新插入行的访问。发生的事情是,对于也在 VISITED 中的每个地方,整个 visits 列在 PLACES 中得到更新...我尝试使用
SET NEW.visits = visits + 1
但后来我收到一个错误,说新的无法识别...任何 ideas/suggestions? :(
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;
顺便说一句,插入后的触发器应该 return null
(尽管忽略任何 return 值)。
中测试
我有点卡在这上面。我正在使用触发器,以便在将新数据条目插入 VISITED 时,它应该更新 table 调用位置中的 visits 属性。但是,我不知道如何才能在 table PLACES 中只更新插入行的访问。发生的事情是,对于也在 VISITED 中的每个地方,整个 visits 列在 PLACES 中得到更新...我尝试使用
SET NEW.visits = visits + 1
但后来我收到一个错误,说新的无法识别...任何 ideas/suggestions? :(
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;
顺便说一句,插入后的触发器应该 return null
(尽管忽略任何 return 值)。