Вы ищете предложение REFERENCING new row as ... | old row as ...
.Подробности об этом можно найти в справочной документации .
. Простой пример:
Настройка таблицы
create table one (ID int primary key, F2 nvarchar(100));
create table two (ID int primary key, F2 nvarchar(100));
insert into one values (1, 'Bla');
insert into one values (2, 'Blupp');
insert into two values (1, 'Bla');
insert into two values (2, 'Blupp');
Создать триггер
create trigger "ONE_TO_TWO"
after update
on "ONE"
referencing new row as new, old row as old
for each row
begin
update "TWO" t
set "F2" = :new."F2"
where t."ID" = :old."ID";
end;
Проверить текущие данные
select
one.id as ONE_ID, one.f2 as ONE_F2
, two.id as TWO_ID, two.f2 as TWO_F2
from
one full outer join two
on one.id = two.id;
/*
ONE_ID ONE_F2 TWO_ID TWO_F2
1 Bla 1 Bla
2 Blupp 2 Blupp
*/
Обновить запись и снова проверить данные
update "ONE"
set "F2" = 'CHANGED THIS'
where "ID" = 1;
/*
ONE_ID ONE_F2 TWO_ID TWO_F2
1 CHANGED THIS 1 CHANGED THIS
2 Blupp 2 Blupp
*/
Хотя использование триггера часто может показаться хорошим подходом, я рекомендую пересмотреть то, для чего он будет использоваться, и если нет более подходящих подходов для удовлетворения требований.Триггеры сами по себе всегда вводят «магию» в модель данных, так как они изменяют семантику обычных операторов - ваш UPDATE
внезапно обновляет несколько таблиц - не будучи очевидным для пользователя БД.На самом деле, только если кто-то активно ищет триггеры, есть шанс, что влияние, которое они оказывают на поведение базы данных, понятно.
Для обновлений с несколькими таблицами хранимая процедура может обрабатывать зависимости, возможно,более очевидный и лучший способ достижения цели.