2016-12-27 4 views
0

У нас есть следующее требование.db2 триггер уровня столбца

TableName: Items; ColumnName: id, isActivated
Имя таблицы: DeactivatedItems; ColumnName: id, timestamp

Всякий раз, когда заданный «id» деактивирован, нам нужно создать запись в таблице «DeactivatedItems» с «id» и меткой времени.

Для этого мы хотели использовать триггер уровня столбца в DB2. В действительности у нас есть больше столбцов в дополнение к id, isActivated столбцам таблицы «Items».

У меня есть следующие вопросы.
Учитывая, что таблица содержит много столбцов, будет ли обновление для других столбцов вызывать этот триггер? Если да, есть какой-либо способ ограничить это.

Кроме того, что такое «транзакционная» природа для данного триггера. Если сбой вызова триггера, он откатывается и от операции обновления.

Заранее благодарен!

+1

Вы пытались прочитать документацию для инструкции 'CREATE TRIGGER'? Что ты нашел? –

+0

Если это не удается, возвращается пользователь, выполняющий обновление. Зависит от того, как ваши действия совершают и что такое для откат. Однако, если вы укажете библиотеку/файл таблицы, в которую вы вставляете и сохраняете вещи, это никогда не потерпит неудачу. – danny117

ответ

1

Да триггер столбца запускается только при обновлении столбца. Включите предложение when для пуленепробиваемого решения.

CREATE TRIGGER danny117t AFTER UPDATE OF isActivated ON mytable 

REFERENCING OLD AS O NEW AS N 
FOR EACH ROW MODE DB2SQL 
--detect change to '0' 
WHEN (N.isactivated = '0' and o.isactivated <> '0') 
BEGIN ATOMIC 
--I hope you can take it from here 
insert into somefile values(n.id); 

END;