如何在informix中创建触发器?

Pet*_*erP 3 sql database informix triggers

我正在尝试编写如下简化示例中的触发器:

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;
)
Run Code Online (Sandbox Code Playgroud)

这失败了!

只有这样有效:

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);
)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Geo*_*one 5

我认为您应该使用 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);
Run Code Online (Sandbox Code Playgroud)