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



我正在研究我的第一个触发器。当我在表上执行插入时,我想有条件地从其他表中删除行。

这是一个触发器:

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触发器没有 NEWOLD .

相关内容

最新更新