DB2 iSeries Trigger для добавленных и измененных отметок времени и пользовательских полей - PullRequest
1 голос
/ 29 апреля 2011

Возможно, триггеры не нужны для добавленных / измененных дат, возможно, в любом случае есть соответствующие функции для установки их значений:

Мой вопрос со следующими полями,

created (timestamp)
updated (timestamp)
createdBy (string, to hold the created by user name)
updatedBy (string, to hold the updated by user name)

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

Редактировать : Теперь мне просто нужно знать, как устанавливать поля updatedBy и updated timesmp при каждом доступе к записи.

1 Ответ

3 голосов
/ 30 апреля 2011

Создайте следующую таблицу для справки:

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

insert into test (content) VALUES ('first thing'),
  ('second thing')      

Чтобы увидеть, что были установлены значения по умолчанию для созданного и созданного пользователем:

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...