В начало

Логирование изменений товара

 

            Есть пресловутая база «Sklad», созданная в СУБД «Interbase 6.5». В этой базе есть таблица «Tovar», в которой перечислены позиции товара.

            Необходимо организовать логирование изменений в таблице «Tovar» посредством триггеров.

            Для начала нужно создать вспомогательную таблицу «Tovar_Log», в которую будут заноситься все изменения по таблице «Tovar». Запускаем «IBConsole», в ней выбираем «Interactive SQL», в верхнюю часть окна пишем запрос и жмем кнопку на выполнение.

CREATE TABLE Tovar_Log (

Dat_Izm DATE,          /* дата изменения */

Deistvie CHAR(3), /* операция */

Old_Tovar VARCHAR(20), /* старое значение TOVAR*/

New_Tovar VARCHAR(20)); /* новое значение TOVAR */

            Все, таблица для логирования готова.

Рис. 1. Свежеиспеченна таблица «Tovar_Log»

 

            Далее создаем триггеры, которые будут записывать все происходящие с таблицей «Tovar» изменения. Сначала пишем триггер на добавление нового товара в таблицу «Tovar».

SET TERM !!;

CREATE TRIGGER Tovar_Log_Add FOR Tovar

ACTIVE AFTER INSERT

AS

BEGIN

   INSERT INTO Tovar_Log

   (Dat_Izm, Deistvie, Old_Tovar, New_Tovar)

   VALUES ('NOW', 'ADD', '', NEW.Tovar);

END!!

SET TERM ;!!

 

 

Рис. 2. Таблицы «Tovar» и «Tovar_Log» при добавлении товара

            В таблицу «Tovar_Log» при добавлении товара «Иммунал» была сделана одна запись, в которой есть дата изменения, вид действия и название нового товара.

            Затем пишем код для триггера на изменение записей в таблице «Tovar». Выполняем его.

SET TERM !!;

CREATE TRIGGER Tovar_Log_Update FOR Tovar

ACTIVE AFTER UPDATE

AS

BEGIN

   INSERT INTO Tovar_Log

   (Dat_Izm, Deistvie, Old_Tovar, New_Tovar)

   VALUES ('NOW', 'UPD', OLD.Tovar, NEW.Tovar);

END!!

SET TERM ;!!

            Потом производим изменения над записью «Виагра», а именно, добавляем в запись дозировку препарата.

 

Рис. 3. Таблицы «Tovar» и «Tovar_Log» при изменении товара

 

            Как видно из рисунка 3, автоматически была внесена запись в таблицу «Tovar_Log», из которой можно понять что и когда произошло с товаром «Виагра».

            Далее пишем код для триггера реагирующего на удаление товара из таблицы «Tovar».

SET TERM !!;

CREATE TRIGGER Tovar_Log_Delete FOR Tovar

ACTIVE AFTER DELETE

AS

BEGIN

   INSERT INTO Tovar_Log

   (Dat_Izm, Deistvie, Old_Tovar, New_Tovar)

   VALUES ('NOW', 'DEL', OLD.Tovar, '');

END!!

SET TERM ;!!

            Для проверки триггера «Tovar_Log_Delete» удаляем запись «Циалис» из таблицы «Tovar» и смотрим, что нам триггеры понаписали в таблицу «Tovar_Log».

Рис. 4. Таблица «Tovar_Log» после удаления записи

 

            Как видно из рисунка 4, в таблице «Tovar_Log» появилась запись, что над товаром «Циалис» провели действие удаления «DEL».

            Таким образом, с помощью трех триггеров было реализовано логирование изменений таблицы «Tovar». По хорошему, в таблицу «Tovar_Log» еще надо вписывать лицо, которое производило изменения, так чтобы было кому потом откручивать яйца, если что.