[英]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.