Я делаю LogTable, где я сохраняю данные, которые были изменены в RealTable.
Под данными я подразумеваю, что мне нужно восстановить значения :new
и :old
всей записи.Итак, у меня есть триггер, который реагирует, есть ли вставка, удаление или обновление.
Итак, мой вопрос: как узнать, какая запись была изменена и как восстановить ее содержимое?
пример:
create table t1(
a integer,
b integer
)
create table LogT1(
new_a integer,
old_a integer,
new_b integer,
old_b integer
)
Допустим, на t1 есть запись со значениями a = 1, b = 2 и t1 получает обновление, поэтому запись меняет значения на a = 3, b = 4
Чтобы обновление активировало триггер, оно должно:
- Узнать, какая запись была изменена.
- Восстановить эту запись.
- Получить «до» и «после значений "a и b"
- Вставьте эти значения в LogT1 как old_a, new_a, old_b, new_b
, получив в результате вставку в LogT1 со значениями new_a = 3, old_a = 1, new_b = 4, old_b = 2
CREATE or REPLACE TRIGGER tr001
AFTER INSERT OR UPDATE OR DELETE ON t1
DECLARE
a integer;
b integer;
a2 integer;
b2 integer;
BEGIN
IF DELETING THEN
*Recover the row that changed*
*Then use that row*
a2:= :new.a ;
b2:= :new.b ;
a:= :old.a ;
b:= :old.b ;
insert into LogT1 (new_a integer, old_a integer, new_b integer, old_b integer)
values (a2,a,b2,b);
END IF;
....
END tr001;
Я новичок в этом, поэтому мои самые искренние извинения, если мой вопрос не является правильным.