【问题标题】:Record old is not assigned on Update Statement更新声明中未分配旧记录
【发布时间】:2018-06-24 14:56:57
【问题描述】:

我创建了一个更新触发器,它应该插入到我的表 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;

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

尚未分配旧记录。

我很高兴得到所有帮助。

【问题讨论】:

    标签: postgresql triggers


    【解决方案1】:

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

    为了能够使用OLDNEW,请使用:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 2015-08-14
      • 1970-01-01
      相关资源
      最近更新 更多