如何在触发器中应用序列顺序?

时间:2012-03-28 10:26:05

标签: triggers informix

在Informix中,我需要在执行触发器时更新2(两个)表。我们说Table_A和Table_B。在Table_A中,有一个int8(长数据类型)列作为主键。插入新记录时,此主键列将从序列中检索值。这是代码:

sequence_A.nextVal

在Table_B中,有一个外键列引用Table_A中的主键。为了使主键和外键相关,我使用sequence_A.currVal将值插入此外键列。

我确实尝试了下面的代码,但是Informix给了我语法错误。

create trigger The_Trigger
insert on The_Table referencing new as n
for each row
(
  insert into Table_A(...) value(sequence_A.nextVal, ...)

  insert into Table_B(...) value(sequence_A.currVal, ...)
)

如果我将insert语句分成2(两)个差异触发器,它就可以工作。因此我想在The_Table上创建两个(两个)触发器。假设Trigger_A和Trigger_B,我可以知道如何确保Trigger_A首先执行,然后只执行Thrigger_B。我可以在触发器上指定订单执行吗?可以这样做吗?怎么样?

1 个答案:

答案 0 :(得分:2)

在第一次尝试中,您省略了两个INSERT语句之间的逗号,关键字是VALUES,而不是VALUE:

CREATE TRIGGER The_Trigger
INSERT ON The_Table REFERENCING NEW AS n
FOR EACH ROW
(
    INSERT INTO Table_A(...) VALUES(sequence_A.nextVal, ...),
    INSERT INTO Table_B(...) VALUES(sequence_A.currVal, ...)
)

通过这两项更改,我相信您会顺序执行。

鉴于Informix的最新版本,您可以在单个表上为单个事件设置多个触发器。执行顺序是定义触发器的顺序。