sql - 记录 "old"尚未分配

标签 sql postgresql

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

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;

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

ERROR: record "old" is not assigned yet Stan SQL:55000

有什么帮助吗?

最佳答案

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

来自fine manual:

For a row-level trigger, the input data also includes the NEW row for INSERT and UPDATE triggers, and/or the OLD row for UPDATE and DELETE triggers.

关于sql - 记录 "old"尚未分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40752230/

相关文章:

postgresql - psql - 将查询和查询的输出写入文件

java - 连接丢失后自动重新连接 JPA EntityManager

ruby-on-rails - STI、MTI 或 CTI,目前建议的 Rails 4 解决方案是什么?

sql - 我必须得到查询结果中的第二大计数

sql - 填补组内日期和变量的空白 - PostgreSQL

sql - MS SQL Server 数据透视表,列子句中带有子查询

java - 如何将此 SQL 查询写入 jOOQ?

sql - 有或没有不同的 oracle 交集

python - 在 python 工作流中调整 Postgresql 性能和内存使用

postgresql - 如何将 ctid 系统列转换为 long,反之亦然