![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Триггер. Не записівается в блоб-поле
}|{yk © (2004-04-23 16:16:00)Такой триггер
CREATE TRIGGER APP_BANK_AI FOR APP_BANK
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 32767
AS
DECLARE VARIABLE TID INTEGER;
DECLARE VARIABLE NEW_VALUE varchar(255);
DECLARE VARIABLE OLD_VALUE varchar(255);
BEGIN
TID = GEN_ID(GEN_APP_LOG_ID,1);
if (inserting or updating) then
begin
NEW_VALUE='<app_bank>';
NEW_VALUE=NEW_VALUE||'<bank_id>'||new.bank_id||'</bank_id>';
NEW_VALUE=NEW_VALUE||'<line_id>'||new.line_id||'</line_id>';
NEW_VALUE=NEW_VALUE||'<set_id>'||new.set_id||'</set_id>';
NEW_VALUE=NEW_VALUE||'<cust1_id>'||new.cust1_id||'</cust1_id>';
NEW_VALUE=NEW_VALUE||'<cust2_id>'||new.cust2_id||'</cust2_id>';
NEW_VALUE=NEW_VALUE||'<summa>'||new.summa||'</summa>';
NEW_VALUE=NEW_VALUE||'<commentar>'||new.commentar||'</commentar>';
NEW_VALUE=NEW_VALUE||'<unit_id>'||new.unit_id||'</unit_id>';
NEW_VALUE=NEW_VALUE||'<plat_date>'||new.plat_date||'</plat_date>';
NEW_VALUE=NEW_VALUE||'<rs_id>'||new.rs_id||'</rs_id>';
NEW_VALUE=NEW_VALUE||'</app_bank>';
end
if (deleting or updating) then
begin
OLD_VALUE='<app_bank>';
OLD_VALUE=OLD_VALUE||'<bank_id>'||old.bank_id||'</bank_id>';
OLD_VALUE=OLD_VALUE||'<line_id>'||old.line_id||'</line_id>';
OLD_VALUE=OLD_VALUE||'<set_id>'||old.set_id||'</set_id>';
OLD_VALUE=OLD_VALUE||'<cust1_id>'||old.cust1_id||'</cust1_id>';
OLD_VALUE=OLD_VALUE||'<cust2_id>'||old.cust2_id||'</cust2_id>';
OLD_VALUE=OLD_VALUE||'<summa>'||old.summa||'</summa>';
OLD_VALUE=OLD_VALUE||'<commentar>'||old.commentar||'</commentar>';
OLD_VALUE=OLD_VALUE||'<unit_id>'||old.unit_id||'</unit_id>';
OLD_VALUE=OLD_VALUE||'<plat_date>'||old.plat_date||'</plat_date>';
OLD_VALUE=OLD_VALUE||'<rs_id>'||old.rs_id||'</rs_id>';
OLD_VALUE=OLD_VALUE||'</app_bank>';
end
if (inserting) then
INSERT INTO APP_LOG (APP_LOG_ID,APP_LOG_TIME,APP_LOG_OPERATION,APP_LOG_TABLE,
APP_LOG_USER,APP_LOG_NEW_VALUE)
VALUES (:TID, 'NOW','insert', 'APP_BANK', USER,:NEW_VALUE);
if (updating) then
INSERT INTO APP_LOG (APP_LOG_ID,APP_LOG_TIME,APP_LOG_OPERATION,APP_LOG_TABLE,
APP_LOG_USER,APP_LOG_OLD_VALUE,APP_LOG_NEW_VALUE)
VALUES (:TID, 'NOW','update', 'APP_BANK', USER,:OLD_VALUE,:NEW_VALUE);
if (deleting) then
INSERT INTO APP_LOG (APP_LOG_ID,APP_LOG_TIME,APP_LOG_OPERATION,APP_LOG_TABLE,
APP_LOG_USER,APP_LOG_OLD_VALUE)
VALUES (:TID, 'NOW','delete', 'APP_BANK', USER,:OLD_VALUE);
END
Структура лога
CREATE TABLE APP_LOG (
APP_LOG_ID IDENTIFIER /* INTEGER */ NOT NULL,
APP_LOG_TIME TIMESTAMP NOT NULL,
APP_LOG_OPERATION VARCHAR(10) NOT NULL COLLATE WIN1251_UA,
APP_LOG_TABLE VARCHAR(32) NOT NULL COLLATE WIN1251_UA,
APP_LOG_USER VARCHAR(32) COLLATE WIN1251_UA,
APP_LOG_MACHINE VARCHAR(32) COLLATE WIN1251_UA,
APP_LOG_OLD_VALUE BLOB SUB_TYPE 1 SEGMENT SIZE 100,
APP_LOG_NEW_VALUE BLOB SUB_TYPE 1 SEGMENT SIZE 100
);
Лог ведется как нужно, только вот ни old_value, ни new_value не пишется. Никто не подскажет, почему?
FireBird 1.5
}|{yk (2004-04-23 17:02:00) [1]С блобами так обращаются
и все пишется
Проблема опять с charset...
Johnmen (2004-04-23 16:54:00) [2]Потому, что с блобами так не обращаются.
Когда начнешь читать доки ?