Найти внятные примеры в интернете мне не удалось. Пришлось как всегда самому все выяснять и разбираться.
After update, after insert ставят перед собой задачу выполнения некоторого кода после update или insert записи в таблице.
Мне нужно было сделать три вещи:
1. Записать в таблицу дату и время создания записи.
2. В таблицу с историей изменений записывать как изменилось поле после update.
3. Записать в таблицу дату и время последнего изменения записи.
Допустим есть таблица CLIENTS такого вида:
ID | NAME | PHONE | CREATE_DATE | MOD_DATE
CREATE OR ALTER TRIGGER CLIENTS_AI FOR CLIENTS
ACTIVE AFTER INSERT POSITION 0
AS
begin
update clients set clients.create_date='NOW' where (clients.id = new.id);
end
CREATE OR ALTER TRIGGER CLIENTS_AU FOR CLIENTS
ACTIVE AFTER UPDATE POSITION 1
AS
begin
if (old.NAME is distinct from new.NAME ) then
update CLIENTS set mod_date='NOW' where id=old.id;
if (old.PHONE is distinct from new.PHONE ) then
update CLIENTS set mod_date='NOW' where id=old.id;
end
ID | FIELD | OLD_VALUE | NEW_VALUE | DATE_TIME |DESCRIPTION
CREATE OR ALTER TRIGGER CLIENTS_AUL FOR CLIENTS
ACTIVE AFTER UPDATE POSITION 0
AS
begin
if (old.NAME is distinct from new.NAME ) then
insert into h_clients (h_clients.id, h_clients.field, h_clients.old_value, h_clients.new_value, h_clients.date_time ,h_clients.description)
values (old.id, 'NAME', old.NAME, new.NAME,'NOW','Фамилия');
if (old.two_ is distinct from new.two_) then
insert into h_clients (h_clients.id, h_clients.field, h_clients.old_value, h_clients.new_value, h_clients.date_time ,h_clients.description)
values (old.id, 'PHONE ', old.PHONE , new.PHONE ,'NOW','Телефон');
end
Новые комментарии