繁体   English   中英

PL / PgSQL在插入时创建条件触发器

[英]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触发器没有NEWOLD

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM