Старая запись не назначена в обновлении - PullRequest
0 голосов
/ 24 июня 2018

Я создал триггер при обновлении, который должен вставить в таблицу 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;

При попытке обновить продукт я получаю сообщение об ошибке

Старая запись не являетсяназначен еще.

Я рад за любую помощь.

1 Ответ

0 голосов
/ 24 июня 2018

OLD и NEW доступны только в триггере row level. Вы определили свой триггер как триггер уровня оператора.

Для возможности использования OLD и NEW используйте:

CREATE TRIGGER trigger 
  AFTER UPDATE ON produkt 
  FOR EACH <b>ROW</b> --<< here
  EXECUTE PROCEDURE triggerfunc();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...