Как создать триггер в Informix? - PullRequest
2 голосов
/ 20 декабря 2011

Я пытаюсь написать триггер, как в следующем упрощенном примере:

create trigger adr_trg update of fname, lname on adr
REFERENCING OLD AS o NEW AS n
FOR EACH ROW
(
  IF o.fname <> n.fname THEN
    insert into adrlog (old_value, new_value)
    values (o.fname, n.fname);
  END IF;

  IF o.lname <> n.lname THEN
    insert into adrlog (old_value, new_value)
    values (o.lname, n.lname);
  END IF;
)

Это не удалось!

Только это работает:

create trigger adr_trg update of fname, lname on adr
REFERENCING OLD AS o NEW AS n
FOR EACH ROW
(
    insert into adrlog (old_value, new_value)
    values (o.fname, n.fname);
)

Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 18 марта 2014

Старый вопрос, но не очень хороший ответ, на случай, если кто-нибудь появится здесь, как я.

Informix обрабатывает запрошенную функциональность, но синтаксис другой:

create trigger adr_trg update of fname,lname on adr 
 referencing old as o new as n
    for each row
    when ( o.fname != n.fname )
    (
      insert into adrlog (old_value,new_value)
        values (o.fname,n.fname)
    ) ,
    when ( o.lname != n.lname )
    (
      insert into adrlog (old_value,new_value)
        values (o.lname,n.lname)
    )
;
3 голосов
/ 20 декабря 2011

Я думаю, вы должны написать хранимую процедуру с логикой IF - THEN и вызвать ее из этого триггера. Я думаю, что триггеры поддерживают только простые операторы SQL, а не операторы SPL

редактирование:

CREATE PROCEDURE proc1()
REFERENCING OLD AS o NEW AS n FOR tab1; 
....your logic


CREATE TRIGGER adr_trg update of fname, lname on adr
REFERENCING OLD AS o NEW AS n
  FOR EACH ROW(EXECUTE PROCEDURE proc1() WITH TRIGGER REFERENCES);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...