Форум: "Базы";
Текущий архив: 2003.02.10;
Скачать: [xml.tar.bz2];
ВнизОрганизация журнал Найти похожие ветки
← →
Andrey (2003-01-23 12:33) [0]Собственно мыслей на эту тему почти нет.
Нужно записывать в отдельную таблицу (группу таблиц?) все изменения которые происходят с данными в некоторой таблице.
Тоесть: выполнил
update tbl1 (f1) values (1) where pk=100;
и в таблицу допустим Log записалось:
insert into log
(user_name, table_name, field_name, key_field_value, old_field_value, new_field_value)
values ("user", "tbl1", "f1", "100", "old_val", "new_val");
Конечно это можно просто в треггер before update запихнуть, НО
таблица у меня э...с динамической структурой, а триггер при изменении структуры менять лень.
Тоесть:
create table tbl1
(pk integer not null primary key,f1 integer, f2 integer);
SET TERM !! ;
create trigger UPD_TBL1 for TBL1
before update position 1000
as begin
if (new.f1<>old.f1) then
begin
insert into log
(user_name, table_name, field_name, key_field_value,
old_field_value, new_field_value)
values
(user, "tbl1", "f1", cast(old.pk as varchar), cast(old.f1 as varchar), cast(new.f2 as varchar));
end
/*и дальше оч-ч-чень похожий кусок кода повторится столько раз сколько полей будет у меня в таблице*/
end !!
SET TERM ; !!
Короче чего я хочу: сделать универсальную процедуру которая будет фиксировать все изменения данных в таблице, независимо от структуры таблици.
Вопрос, возможно ли это, и если возможно то как?
P.S. Формировать insert Log с клиента, после удачного выполнения update tbl1, не предлогать. Это уже небудет журнал, это будет... ну не журнал точно!!! Это может подойти для 3-х звеньевой архитектуры, а для 2-х звеньевой никак.
← →
Johnmen (2003-01-23 12:53) [1]>Короче чего я хочу: сделать универсальную процедуру которая
>будет фиксировать все изменения данных в таблице, независимо от
>структуры таблици.
Как можно фиксировать изменения того, что не определено ?
← →
Ops (2003-01-23 13:19) [2]Делай таблицу такую для журнала
1. ID
2. Название таблицы
3. Структур таблицы в тек момент
4. Старые данные
5. Новые данные
6. Дата
← →
Andrey (2003-01-23 13:24) [3]>Johnmen
Я ж несобираюсь фиксировать изменения пока таблица неопределена, я хочу фиксировать изменения когда табица уже будет определена, просто нехочется при изменеии структуры таблици менять треггер.
Хочется чтоб тригер анализировал структуру таблици (например через системные таблици IB) и фиксировал изменения во всех полях о которых он узнает в результате этого анализа.
Список полей я уж как-нибудь вытащу, но проблема в том, что я незнаю как обратится к значению поля (old.f1; new.f1) по его имени. Это собственно и есть основная проблемма.
← →
Johnmen (2003-01-23 14:01) [4]То есть нужна, фактически, интерпретация строкового значения...
Возможно, она решена в послендих версиях клонов IB.
Для IB6 такого не сделаешь...
← →
Ops (2003-01-23 14:08) [5]не делай old.f1
делай select * по ID до изменения = все старые данные таблицы
делай select * по ID после изменения = все новые данные таблицы
← →
Andrey (2003-01-23 15:02) [6]>Для IB6 такого не сделаешь...
Плохо... Значит будут триггеры befor update и befor insert...
Спасиб.
← →
int64 (2003-01-23 16:11) [7]Такая таблица вообще не нужна, одного лога хватит. Всегда можно узнать последнее состояние объекта. А все модификации данных сведутся к insert.
К тому же, если и структуре данных предстоит изменяться, то фобия к формированию клиентских запросов вообще безосновательна.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.02.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c