postgresql - 旧记录未在更新语句中分配

标签 postgresql triggers

我在更新时创建了一个触发器,它应该插入到我的表 preishist 中。

//preishist
CREATE TABLE preishist (
  updatenr varchar(4),
  preis numeric(8,2),
  pnr varchar(4),
  gueltigab date,
  PRIMARY KEY(updatenr));

//produkt
CREATE TABLE produkt(
pnr varchar(4),
name varchar(4),
preis numeric(8,2),
gultigab date,
PRIMARY KEY(pnr));

//Trigger
CREATE TRIGGER trigger AFTER UPDATE ON produkt FOR EACH STATEMENT EXECUTE 
PROCEDURE triggerfunc();


//Triggerfunc
CREATE FUNCTION triggerfunc RETURNS TRIGGER AS '
begin 
   IF TG_OP = 'UPDATE' THEN 
      IF OLD.preis <> NEW.preis AND OLD.gueltigab < NEW.gueltigab THEN
         INSERT INTO preishist (preis,pnr,gultigab) VALUES (NEW.preis, NEW.pnr,NEW.gueltigab);
      end IF;
   end IF;                                                                                              
end;

当我尝试更新产品时收到错误消息

Record old is not assigned yet.

我很高兴能得到所有帮助。

最佳答案

OLDNEW 仅在 级触发器中可用。您将触发器定义为语句级触发器。

要能够使用 OLDNEW 使用:

CREATE TRIGGER trigger 
  AFTER UPDATE ON produkt 
  FOR EACH <b>ROW</b> --<< here
  EXECUTE PROCEDURE triggerfunc();

关于postgresql - 旧记录未在更新语句中分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51011079/

相关文章:

hibernate - 将hibernate sql结果存储到arraylist

mongodb - 如何从postgres中的mongodb objectid中提取时间戳

java - 由 : org. postgresql.util.PSQLException 引起:错误:列 "student_id"中的空值违反了非空约束

postgresql - 如何使用Sqoop将Postgres表(几何格式)导入Hive?

Python Postgres 将列设置为百分位数

mysql - 如何在MySQL中循环数组

mysql - 基本 SQL 触发器

mysql - 将 MySql 触发器转换为 SQL Server 2008 R2 触发器

php - 如何使用 PHP 跟踪数据库表中的更新?

MySQL 在更新触发之前出现错误