我正在研究我的第一个触发器。当我在表上执行插入时,我想有条件地从其他表中删除行。
这是一个触发器:
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();
作为一个错误,我看到新的或旧的(如果我激励触发器)没有声明/未知。问题出在哪里?
在 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
.