Delta для логов

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Linco
Сообщения: 13
Зарегистрирован: 01 дек 2004, 16:02

Delta для логов

Сообщение Linco » 01 дек 2004, 16:17

Хочу прикрутить к табличкам простейший логгер типа:
CREATE TABLE LOGTABLE (
ID INTEGER NOT NULL,
CHANGETIME TIMESTAMP NOT NULL,
TABLENAME VARCHAR(30) NOT NULL,
RECID INTEGER NOT NULL,
OPERATION TLOGOPERATIONS NOT NULL /* TLOGOPERATIONS = CHAR(1) NOT NULL CHECK (value in ('I','U','D')) */,
LOGUSER VARCHAR(8) NOT NULL,
LOGROLE VARCHAR(31),
OLDVALUEDELTA VARCHAR(1000),
NEWVALUEDELTA VARCHAR(1000)
);
Все ничего, однако как с минимальными затратами получить дельту между старой и новой записью.
Например, делаю триггер:
insert into logtable
values(GEN_ID(GEN_ABONENTSTABLE_ID_AUTOINC,1),
current_timestamp,
'tablename',
NEW.id,
'I',
current_user,
current_role,
null,
(new.id||', '||new.abonentname||', '||new.responsible||', '||new.phone));
Хоть триггер компилируется, вычисляемое значение не считается.
Какие варианты логирования есть.
ЗЫ Сразу скажу, разбивать по полям и логировать каждое поле отдельно в отдельной табличке мне не нужно, лог простой.
ЗЗЫ FB1.5

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 01 дек 2004, 16:57

у тебя один из столбцов которым делается конкатенация (a||b) содержит null. грубо говоря, null + x = null

Linco
Сообщения: 13
Зарегистрирован: 01 дек 2004, 16:02

Сообщение Linco » 01 дек 2004, 17:25

Спасибо, это не учел :), как стороки складывал

Ответить