Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.008 c
9-28568
Armageddon
2002-08-31 11:15
2003.02.10
Разное


4-29169
VirginKiller
2002-12-28 19:43
2003.02.10
Меню


7-29114
Sir DAMM
2002-12-05 13:22
2003.02.10
exel addin


6-28974
Друпи
2002-10-02 23:41
2003.02.10
SMS


14-29084
Шишкин Илья
2003-01-24 21:23
2003.02.10
Помогите найти прогу (или компонент)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский