【问题标题】:Record "old" not assigned yet尚未分配记录“旧”
【发布时间】:2016-11-22 21:45:51
【问题描述】:

我已经创建了这个触发器:

CREATE TRIGGER trig_update 
AFTER INSERT
ON "delivery" FOR EACH ROW
EXECUTE PROCEDURE premium1();

使用此功能:

CREATE OR REPLACE FUNCTION premium1() 
RETURNS trigger AS $$
BEGIN
IF (TG_OP='INSERT') THEN
IF(select sum(amount) from delivery where cli_num=OLD.cli_num group by cli_num) > 500.00 THEN
    UPDATE client SET Type ='Gold' WHERE cli_num=OLD.cli_num;
END IF;
END IF;
RETURN NULL;
END;
$$LANGUAGE plpgsql;

在表格传递中插入新值时,出现以下错误:

错误:尚未分配记录“旧” Stan SQL:55000

有什么帮助吗?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    INSERT 触发器中OLD 不可访问/可见,因为该记录尚未在数据库中,因此没有什么可比较的。您必须将其更改为NEW

    来自fine manual:

    对于行级触发器,输入数据还包括新行 INSERT 和 UPDATE 触发器,和/或 UPDATE 和 DELETE 的 OLD 行 触发器。

    【讨论】:

    • 感谢您的回复,卡米尔
    • @Kamil Gosciminski,这不是因为 AFTER 而是因为 INSERT。请重新阅读您在答案中写的报价并进行编辑
    • @Roman 谢谢,我当时没有写我的意思。已更正!
    【解决方案2】:
    CREATE OR REPLACE FUNCTION premium1() 
    RETURNS trigger AS $$
    BEGIN
    IF (TG_OP='INSERT') THEN
    IF(select sum(amount) from delivery where cli_num=NEW.cli_num group by cli_num) > 500.00 THEN
        UPDATE client SET Type ='Gold' WHERE cli_num=NEW.cli_num;
    END IF;
    END IF;
    RETURN NULL;
    END;
    $$LANGUAGE plpgsql;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-21
      • 2017-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多