#db2 #ibm-midrange
#db2 #ibm-средний уровень
Вопрос:
Возможно, триггеры не нужны для добавленных / измененных дат, возможно, в любом случае существуют соответствующие функции для установки их значений:
Мой вопрос касается следующих полей,
created (timestamp)
updated (timestamp)
createdBy (string, to hold the created by user name)
updatedBy (string, to hold the updated by user name)
как мне изменить таблицу таким образом, чтобы при создании и обновлении эти поля содержали соответствующие значения?
Редактировать: теперь мне просто нужно знать, как устанавливать поля UpdatedBy и updated timestamp при каждом обращении к записи.
Комментарии:
1. Хорошо, я вижу, что созданное поле обрабатывается с помощью одной только временной метки, значением по умолчанию является время вставки. Осталось одно…
2. «CreatedBy CHAR(30) ПОЛЬЗОВАТЕЛЬ ПО УМОЛЧАНИЮ» обрабатывает поле CreatedBy… Осталось еще два.
3. В этом руководстве даны ответы на мои вопросы о триггере datetime dbforums.com/db2/1612640-update-trigger-update-time-column.html , Я, вероятно, сам отвечу немного позже…
Ответ №1:
Создайте следующую таблицу для справки:
create table test(
id integer generated always as identity,
content char(60),
createdBy char(30) default user,
created timestamp default current timestamp,
updatedBy char(30),
updated timestamp default null,
primary key(id)
)
В этой таблице есть автоматически увеличивающийся первичный ключ (id), поле CreatedBy, которое устанавливается при вставке, созданная временная метка, которая устанавливается при вставке. Теперь нам просто нужны триггеры, чтобы заставить последние два работать должным образом (есть новая функция для установки обновления при обновлении без использования триггеров, но функция, похоже, не позволяет нулевому значению показывать, что запись никогда не обновлялась, поэтому у меня это не работает).
insert into test (content) VALUES ('first thing'),
('second thing')
Чтобы убедиться, что установлены значения по умолчанию для created и CreatedBy:
select * from test
Для добавления триггеров обновления:
CREATE TRIGGER mytrigger
NO CASCADE BEFORE UPDATE ON test
REFERENCING NEW AS post
FOR EACH ROW MODE DB2ROW
SET
post.updated = CURRENT TIMESTAMP,
post.updatedBy = USER
Чтобы проверить, работает ли вышеуказанное, давайте обновим значения в «содержимом»:
update co05arh/test
set content = 'first thing updated'
where id = 1
Чтобы увидеть новые значения по умолчанию
select * from co05arh/test
Затем мы должны увидеть что-то вроде
ID CONTENT CREATEDBY CREATED UPDATEDBY UPDATED
1 first thing updated KEN 2011-04-29 16:16:17.942429 KEN 2011-04-29 16:16:28.649543
2 second thing KEN 2011-04-29 16:16:18.01629 <null> <null>