Как применить порядок последовательности в триггере? - PullRequest
1 голос
/ 28 марта 2012

В Informix мне нужно обновить 2 (две) таблицы при запуске триггера. Давайте скажем Таблица_A и Таблица_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, ...)
)

Если я разделю оператор вставки на 2 (два) разностных триггера, это сработает. Таким образом, я думал создать 2 (два) триггера на The_Table. Допустим, Trigger_A и Trigger_B, могу ли я знать, как я могу гарантировать, что Trigger_A будет выполняться сначала, а затем только Thrigger_B. Могу ли я указать выполнение заказа на триггерах? Можно ли это сделать? И как?

1 Ответ

2 голосов
/ 29 марта 2012

В первой попытке вы пропустили запятую между двумя операторами 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, вы можете иметь несколько триггеров для одного события в одной таблице. Последовательность выполнения - это последовательность, в которой определены триггеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...