簡體   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