[英]PL/PgSQL creating a conditional trigger on insert
我正在研究我的第一个触发器。 当我在表上执行INSERT时,我想条件性地从其他表中删除行。
这是一个触发器:
CREATE OR REPLACE FUNCTION clear_seen_by()
RETURNS trigger AS
$BODY$
BEGIN
IF (OLD.popup = '1') THEN
DELETE FROM news_seen_by;
END IF;
RETURN NULL;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
调用者:
CREATE TRIGGER clear_seen_by
AFTER INSERT
ON news
FOR EACH STATEMENT
EXECUTE PROCEDURE clear_seen_by();
作为错误,我看到NEW或OLD(如果我通知触发器)未声明/未知。 问题出在哪儿?
在INSERT语句中,您没有定义OLD
记录。
您应该使用NEW.popup
,并声明触发器为FOR EACH ROW
。
CREATE OR REPLACE FUNCTION clear_seen_by() RETURNS trigger AS
$BODY$
BEGIN
IF (NEW.popup = '1') THEN
DELETE FROM news_seen_by;
END IF;
RETURN NULL;
END;
$BODY$
LANGUAGE plpgsql VOLATILE COST 100;
CREATE TRIGGER
clear_seen_by
AFTER INSERT ON
news
FOR EACH ROW EXECUTE PROCEDURE
clear_seen_by();
您FOR EACH STATEMENT
声明一个触发器。 也许你需要FOR EACH ROW
?
FOR EACH STATEMENT
触发器没有NEW
和OLD
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.