теперь делаем такой триггер для каждой таблицы
Код | CREATE TRIGGER APART_BI0 FOR APART ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 1 AS declare variable Table_name varchar(100); begin Table_name = 'APART'; if (inserting) then begin insert into journal (uid, date_time, TABLE_NAME, ACT, client_ip) select VAR_VALUE, current_timestamp, :Table_name, 'ДОБАВЛЕНИЕ',rdb$get_context('SYSTEM', 'CLIENT_ADDRESS') from sp_get_global_var('USER_ID'); end
if (updating) then begin insert into journal (uid, date_time, TABLE_NAME, ACT, client_ip) select VAR_VALUE, current_timestamp, :Table_name, 'ОБНОВЛЕНИЕ',rdb$get_context('SYSTEM', 'CLIENT_ADDRESS') from sp_get_global_var('USER_ID'); end
if (deleting) then begin insert into journal (uid, date_time, TABLE_NAME, ACT, client_ip) select VAR_VALUE, current_timestamp, :Table_name, 'УДАЛЕНИЕ',rdb$get_context('SYSTEM', 'CLIENT_ADDRESS') from sp_get_global_var('USER_ID'); end end
|
Добавлено @ 14:17 если бы в контексте триггера ещё можно было бы узнать имя таблицы....
Добавлено @ 14:30 А МОЖНО НЕМНОГО ПО ДРУГОМУ РЕАЛИЗОВАТЬ. Создаем хранимую процедуру:
Код | CREATE PROCEDURE SP_JOURNALING ( table_name varchar(100) character set win1251, act varchar(100) character set win1251) as declare variable user_id integer; begin select coalesce(VAR_VALUE, -1) from sp_get_global_var('USER_ID') into :USER_ID;
if (:act = 'ДОБАВЛЕНИЕ') then begin insert into journal (UID, date_time, TABLE_NAME, ACT, client_ip) values (:USER_ID, current_timestamp, :Table_name, :act, rdb$get_context('SYSTEM', 'CLIENT_ADDRESS')); end
if (:act = 'ОБНОВЛЕНИЕ') then begin insert into journal (UID, date_time, TABLE_NAME, ACT, client_ip) select VAR_VALUE, current_timestamp, :Table_name, :act,rdb$get_context('SYSTEM', 'CLIENT_ADDRESS') from sp_get_global_var('USER_ID'); end
if (:act = 'УДАЛЕНИЕ') then begin insert into journal (UID, date_time, TABLE_NAME, ACT, client_ip) select VAR_VALUE, current_timestamp, :Table_name, :act,rdb$get_context('SYSTEM', 'CLIENT_ADDRESS') from sp_get_global_var('USER_ID'); end
end^
|
создаем триггер
Код | CREATE TRIGGER ARENDA_BIUD0 FOR ARENDA ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 0 AS begin if (inserting) then execute procedure sp_journaling('ARENDA','ДОБАВЛЕНИЕ'); if (updating) then execute procedure sp_journaling('ARENDA','обновление'); if (deleting) then execute procedure sp_journaling('ARENDA','удаление'); end
|
|