更新语句未分配记录旧

问题描述 投票:0回答:1

我在Update上创建了一个Trigger,它应该在我的表格中插入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;

当我尝试更新produkt时,我收到错误消息

记录旧的尚未分配。

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

postgresql triggers
1个回答
1
投票

OLDNEW仅适用于行级触发器。您将触发器定义为语句级触发器。

为了能够使用OLDNEW使用:

CREATE TRIGGER trigger 
  AFTER UPDATE ON produkt 
  FOR EACH ROW --<< here
  EXECUTE PROCEDURE triggerfunc();
© www.soinside.com 2019 - 2024. All rights reserved.