Изучение перегружаемых функций и триггеров в PostgreSQL

Страницы работы

Содержание работы

Министерство образования и науки Российской Федерации

Новосибирский Государственный Технический Университет

Описание: Описание: NSTU1

Лабораторная работа 7

Перегружаемые функции, триггеры в PostgreSQL

Выполнил: Малко А.А.

 Группа: АМ-809                                                                                  
                                                                                    

Новосибирск

 2011

Цель работы:

Изучение перегружаемых функций и триггеров в PostgreSQL. Изучить синтаксис команд. Получение навыков работы с триггерами.

Вариант 2:

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

Триггер  выполняется перед вставкой новой записи в таблицу клиентов продуктового магазина.  Триггер проверяет  значения, которые должна  содержать новая  запись и может их изменить:

  • eсли  не указано имя клиента – оно генерируется по схеме – Klient + уникальный номер  из последовательности;
  • eсли  не указан город клиента– ставится значение по  умолчанию – “Moskva” ;
  • если не указан объем заказа или объем заказа <=0 – устанавливается объем заказа, равный 5 для клиентов из города “Moskva” и 0 для всех остальных.

Ход работы:

Исходное состояние таблицы sold_out.

Исходное состояние таблицы buyers.

Создадим триггерную функцию, удаляющую связи из таблицы sold_out при удалении строки из buyers, то есть при удалении чека, удаляются все записи о продаже по этому чеку из таблицы sold_out:

CREATE or REPLACE Function delete_buyer()

RETURNS trigger AS

$$

BEGIN

delete from sold_out where buyer=OLD.buyer_id;

RETURN OLD;

END

$$

LANGUAGE  'plpgsql';

Активируем триггер:

CREATE TRIGGER trig1

BEFORE DELETE ON buyers FOR EACH ROW

EXECUTE PROCEDURE delete_buyer();

Удаляем запись из таблицы buyers.

delete from buyers where buyer_id=4;

Видим, что связанные с данным чеком покупки так же были удалены:

Создадим триггерную функцию для вставки в таблицу gds согласно варианту (немного изменив условия задания):

CREATE SEQUENCE uid START WITH 100;

\\ Создание последовательности.

CREATE or REPLACE Function add_good()

RETURNS trigger AS

$$

BEGIN

         IF (NEW.gds_name is null) then

                  NEW.gds.name='Tovar' || nextval('uid');

         END IF;

         IF (NEW.maker_name is null) then

                  NEW.maker_name = 'Moskva';

         END IF;

         IF (NEW.count_whs <= 0) then

                  IF (NEW.maker_name ='Moskva') then

                           NEW.count_whs=5;

                  ELSE

                           NEW.count_whs=0;

                  END IF;

         END IF;

         RETURN NEW;

END

$$

LANGUAGE  'plpgsql';

Активируем триггер на вставку в таблицу gds:

CREATE TRIGGER gds_trigger BEFORE INSERT ON gds

FOR EACH ROW EXECUTE PROCEDURE add_good();

Перегрузим функцию для вставки в таблицу gds, для проверки работы триггера:

CREATE or REPLACE function add_good(integer,integer,integer,integer,boolean)

returns void as

$$

BEGIN

insert into gds(shop_id,gds_name,gds_price,count_whs,count_sold_out, maker_name,arhiv)

values($1,null,$2,$3,$4,null,$5);

END

$$

LANGUAGE  'plpgsql';

Вызываем функцию вставки в gds:

select add_good(2,100,-5,200,FALSE);

Видим, что триггер сработал корректно:

Вывод

В результате выполнения данной работы были получены навыки создания триггеров определенных событий с детальной настройкой условия срабатывания триггера, а также привязывания функций-обработчиков событий к объекту триггера. Помимо этого, была продемонстрирована работа перегруженных функций.

Похожие материалы

Информация о работе

Предмет:
Базы данных
Тип:
Отчеты по лабораторным работам
Размер файла:
213 Kb
Скачали:
0