Создать триггер после вставки для текущего обновления отметки времени - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь создать архив следующим образом. Создал реплику таблицы, из которой я хочу архивировать, и добавил столбец с именем DATA_PERIOD. Моя идея состоит в том, чтобы создать триггер, который после вставки этой таблицы с данными из исходной таблицы, DATA_PERIOD обновляется с current_timestamp. Вот код, который я написал.

CREATE TRIGGER ORDERS_SUMMARY_ARCHIVE
AFTER INSERT ON GDTS.ORDERS_SUMMARY_A
FOR EACH ROW
WHEN (DATA_PERIOD IS NULL)
UPDATE GDTS.ORDERS_SUMMARY_A SET DATA_PERIOD = CURRENT_TIMESTAMP

Поэтому, когда таблица заполнена, вставляется отметка времени.

Не уверен, что есть лучший способ сделать это. Я нашел это утверждение в книге знаний и попытался адаптировать его к своим потребностям, но безуспешно.

«DATA_PERIOD» недопустимо в контексте, где оно используется. SQLCODE = -206, SQLSTATE = 42703, DRIVER = 3,68,61

Нужна ли какая-то ссылка на таблицу в условии?

Спасибо

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Использовать перед вставкой триггера, как предложено Гордоном Линоффом. Ссылочная переменная для новой записи должна быть определена в разделе заголовка триггера.

CREATE TRIGGER ORDERS_SUMMARY_ARCHIVE BEFORE INSERT ON GDTS.ORDERS_SUMMARY_A REFERENCING NEW AS N FOR EACH ROW WHEN (N.DATA_PERIOD IS NULL) BEGIN ATOMIC SET N.DATA_PERIOD = CURRENT_TIMESTAMP; END

0 голосов
/ 06 июля 2018

Я думаю, вам нужен before триггер вставки. Если у меня есть право синтаксиса DB2:

CREATE TRIGGER ORDERS_SUMMARY_ARCHIVE BEFORE INSERT ON GDTS.ORDERS_SUMMARY_A
FOR EACH ROW WHEN (DATA_PERIOD IS NULL)
    SET DATA_PERIOD = CURRENT_TIMESTAMP;
...