У меня есть база данных с 15 таблицами внутри.Теперь я создал триггер ниже, который будет сохранять журналы в таблицу вторичного аудита.Я создам триггеры для всех моих таблиц, потому что я хочу отслеживать все действия, выполняемые пользователями внутри моей базы данных.Пожалуйста, помогите мне с моим кодом ниже, исправьте меня, если я делаю это неправильно.Я также ищу помощь в том, как записать конкретное событие, которое произошло в таблице.Например, пользователь изменил зарплату определенного сотрудника, журнал должен выглядеть так: Action_done --- обновить зарплату.Мне не нужно знать, кто именно является сотрудником, только то, что было сделано по какой колонке.Наконец, я использовал последовательность для автоматического заполнения идентификатора журнала моей таблицы аудита. Правильно ли я это делаю?Заранее спасибо!
CREATE OR REPLACE TRIGGER database_level_audit
after insert or delete or update on employee
for each row
WHEN (new.eventlog_id IS NULL)
declare
v_user varchar2;
v_date date;
v_time timestamp;
act_done varchar2(20) := case when updating then 'Update' when deleting then 'Delete' else 'Insert' end;
begin
select user, To_Char(sysdate,'DD/MON/YYY'), To_char(CURRENT_TIMESTAMP,'HH12:MI:SS') into v_user, v_date, v_time from dual;
SELECT eventlog_id_seq.NEXTVAL INTO :new.eventlog_id FROM dual;
if inserting then
insert into eventlogs(eventlog_id, user_name, date_done, time_done, action_done, object_name)
values (:NEW.eventlog_id, v_user, v_date, v_time, act_done , 'customer');
elsif deleting then
insert into eventlogs(eventlog_id, user_name, date_done, time_done, action_done, object_name)
values (:NEW.eventlog_id, v_user, v_date, v_time, act_done,'customer');
elsif updating then
insert into eventlogs(eventlog_id, user_name, date_done, time_done, action_done, object_name)
values (:NEW.eventlog_id, v_user, v_date, v_time, act_done ,'customer');
end if;
end;