PRINT ‘Отмена продажи: такой товар отсутствует в таблице Товары’
Пример 2.Пусть пополнение таблицы Поставки осуществляется командой
INSERT INTO Поставки VALUES('01/08/2002', 103 , 1, 45, 200)
Здесь ID_товара=103, ID_поставщика = 1, Количество поставляемого товара =45, Цена_ед_товара =200.
Если товар с номером 103 отсутствует в таблице Товары, то транзакция отменяется и выдается предупреждение о том, что сначала необходимо внести такой товар в таблицу Товары.
Замечание:триггер обрабатывает только одну добавляемую строку.
Пример 3.Создать триггер для обработки операции удаления записи из таблицы Поставки, например, такой команды:
DELETE FROMПоставки WHEREТовар=4
Однако такое удаление может нарушить в базе данных количественное соответствие поставленного и проданного товара с номером 4, а именно, может оказаться, что по совокупности поставлено такого товара меньше, чем было продано.
Необходимо перед удалением записи произвести соответствующие расчеты и разрешить удаление только в случае не нарушения бизнес-правила.
Триггер обрабатывает только одну удаляемую запись.
Пример 4.Создать триггер для обработки операции изменения записи в таблице Продажи, например, такой командой:
UPDATE Продажи SET Количество=Количество-10 WHEREID_Товара=3
для всех продаж с товаром, имеющим ID_товара= 3, уменьшить количество проданного товара на 10 единиц.
Замечание: указанная команда может привести к изменению сразу нескольких записей в таблице Продажи. Поэтому необходимо создать триггер, обрабатывающий не одну запись.
Пример 4.В примере 3 происходит отмена всех изменений при невозможности реализовать хотя бы одно из них. Создать триггер, позволяющий отменять изменение только некоторых записей и выполнять изменение остальных.
Замечание: в этом случае триггер должен выполняться не после изменения записей, а вместо команды изменения.
Даны таблицы Книга и Автор. Создать триггер, обрабатывающий вставку одной записи в таблицу Книга. При этом в таблице Автор должен увеличиться общий тираж изданий соответствующего автора.
Даны таблицы Книга и Автор. Пусть они не связаны внешним ключом. Для обеспечения целостности данных создать триггер, обрабатывающий удаление информации о некотором авторе из таблицы Автор. При этом необходимо запретить удаление, если упомянутый автор издавал свои книги в издательстве «Мир».
Даны таблицы Книга и Автор. Создать триггер, обрабатывающий изменение количества книг в одной записи таблицы книга. При этом в таблице Автор необходимо пересчитать общий тираж книг соответствующего автора.
Даны таблицы Рейс и Билет. Создать триггер,
обрабатывающий вставку одной записи в таблицу Билет. При этом в таблице Рейс должно уменьшиться число свободных мест для соответствующего рейса.
Даны таблицы рейс и Билет. Пусть они не связаны внешним ключом. Для обеспечения целостности данных создать триггер, обрабатывающий удаление записи о некотором рейсе из таблицы Рейс. При этом из таблицы Билет необходимо удалить записи обо всех билетах, проданных на этот рейс.
Даны таблицы Рейс и Билет. Создать триггер, обрабатывающий изменение в одной записи номера рейса в таблице Билет. При этом в таблице рейс необходимо пересчитать количество свободных мест (уменьшить для прежнего рейса и увеличить для нового значения номера рейса).
Даны таблицы Блюдо и Компонент. Создать триггер, обрабатывающий вставку одной записи в таблицу компонент. При этом в таблице Блюдо должна увеличиться стоимость соответствующего блюда.
Даны таблицы Блюдо и компонент. Пусть они не связаны внешним ключом. Для обеспечения целостности данных создать триггер, обрабатывающий удаление информации о некотором блюде из таблицы Блюдо. При этом в таблице компонент необходимо для всех компонентов удаленного блюда в качестве значения поля Название_блюда поставить значение null.
Даны таблицы Блюдо и Компонент. Создать триггер, обрабатывающий изменение стоимости одного компонента в таблице компонент. При этом в таблице Блюдо должна измениться стоимость соответствующего блюда.