将IFTHEN条件放入触发函数

时间:2019-05-07 02:09:59

标签: postgresql

我有两个桌子

  1. 主表

  2. 子表

我的意图是使用触发函数将新行插入满足子列不为空的条件的子表中。

我已经尝试过这种方法,但是我的子表仍会插入具有空值的行

BEGIN
    INSERT INTO unsubscriber_list("ID","Name","Email","unsubdate")
    SELECT new."ID",new."Name",new."Email",new."date_of_unsub" FROM master_database
    WHERE date_of_unsub IS NOT NULL
    ORDER BY "account_created_on" DESC LIMIT 1;
    RETURN NULL;
END;

我也尝试过IFTHEN条件,但是会产生错误

BEGIN
    IF master_database.date_of_unsub IS NOT NULL THEN
    INSERT INTO unsubscriber_list("ID","Name","Email","unsubdate")
    SELECT new."ID",new."Name",new."Email",new."date_of_unsub" FROM master_database;
    END IF;
    RETURN NULL;
END;

这是他们显示的错误

ERROR:  missing FROM-clause entry for table "master_database"
LINE 1: SELECT master_database.date_of_unsub IS NOT NULL

我的预期结果是插入触发器激活触发器功能,从而验证特定列是否不为空

如果为Null:忽略 如果不为空:插入。

1 个答案:

答案 0 :(得分:1)

在玩完我的代码之后,看来我已经解决了问题。

我使用了IFTHEN函数并添加了一个NEW(根据postgresql,这是一个特殊变量,将自动为触发器函数创建以保存新创建的行。)

这是我的代码

BEGIN
    IF NEW.date_of_unsub IS NOT NULL THEN
    INSERT INTO unsubscriber_list("ID","Name","Email","unsubdate")
    SELECT NEW."ID",NEW."Name",NEW."Email",NEW."date_of_unsub" FROM master_database;
    END IF;
    RETURN NULL;
END;

我已经通过插入脚本测试了该功能,并且似乎在忽略不适当的行的同时创建了适当的行。

再说一次,我是Postgresql的新手,所以我可能没有最好的代码。将寻找更清洁的方式来产生这种功能!