лаба13БД
.docМинистерство образования и науки РФ
РГРТУ
Кафедра ЭВМ
Отчет
о лабораторной работе №13
«Разработка триггеров»
Выполнили:
Ст.гр. 048 (бр.6)
Перунова Е.
Шумилова А.
Проверили:
Громов А.Ю.
Рязань, 2012 г.
1. Изучение оператора CREATE TRIGGER для создания триггеров к базовым таблицам БД.
1.1. Разработать AFTER-триггер, который позволяет удалять информацию обо всех абонентах из таблицы Абоненты, кроме абонента с номером 1. Считать, что пользователю предоставляется возможность удаления множества записей в таблице.
CREATE TRIGGER T3
ON Абоненты
AFTER DELETE
AS
IF EXISTS(SELECT ЧитБилет
FROM deleted
WHERE ЧитБилет =1)
rollback tran
GO
Проверка:
DELETE
FROM Абоненты
WHERE ЧитБилет =1
1.2. Разработать INSTEAD OF-триггер для рассматриваемого в п.1.1 задания.
Сравнить результаты работы INSTEAD OF и AFTER-триггеров.
CREATE TRIGGER T4
ON Абоненты
INSTEAD OF DELETE
AS
DELETE
FROM Абоненты
WHERE ЧитБилет IN (SELECT ЧитБилет
FROM deleted) and ЧитБилет <>1
GO
Проверка:
DELETE
FROM Абоненты
WHERE ЧитБилет =1 or ЧитБилет =16
1.3. Разработать триггер, который позволяет изменять значение штрафа за утерю только на большее значение. Считать, что пользователю предоставляется возможность модификации множества записей в таблице.
CREATE TRIGGER T6
ON ВыдачаКниг
INSTEAD OF UPDATE
AS
UPDATE ВыдачаКниг
SET Штраф=inserted.Штраф
FROM inserted
WHERE (ВыдачаКниг.Книга = inserted.Книга)
AND inserted.Штраф > ВыдачаКниг.Штраф
GO
Проверка:
UPDATE ВыдачаКниг
SET Штраф = 20
WHERE Книга = 1
2. Со здание триггеров для представлений.
2.1. Создать представление с информацией о выдаче книг на руки. Представление должно включать столбцы Номер читательского билета, Фамилия абонента, Шифр книги, Название книги, Дата выдачи, Срок возврата, Размер штрафа за утерю книги.
CREATE VIEW V12
AS
SELECT ЧитБилет, Фамилия as Абонент, Шифр, Название as Книга,
ДатаВыдачи, CрокВозврата, Штраф
FROM Абоненты INNER JOIN ВыдачаКниг
ON Абоненты.ЧитБилет = ВыдачаКниг.Абонент INNER JOIN Книги
ON ВыдачаКниг.Книга = Книги.Шифр
GO
Проверка:
SELECT*
FROM V12
2.2. Разработать триггер, который позволяет вносить информацию о выдаче книг через представление. Считать, что пользователю предоставляется возможность вставки только одной записи через представление. Предусмотреть вывод сообщения об ошибке в случае ввода информации о несуществующем абоненте или книге.
CREATE TRIGGER T5
ON V12
INSTEAD OF INSERT
AS
DECLARE @bilet int, @fam char(40),
@shifr int, @name char(40), @datavyd datetime,
@datavozvr datetime, @shtraf money
SELECT @bilet = [ЧитБилет],
@fam=[Абонент],
@shifr = [Шифр],
@name=[Книга],
@datavyd =[ДатаВыдачи],
@datavozvr=[СрокВозврата],
@shtraf= [Штраф]
FROM inserted
IF NOT EXISTS(SELECT *
FROM Абоненты
WHERE ЧитБилет=@bilet AND Фамилия = @fam)
PRINT 'Такого абонента не существует'
ELSE
IF NOT EXISTS(SELECT*
FROM Книги WHERE Шифр = @shifr AND Название = @name)
PRINT 'Такой книги не существует'
ELSE
BEGIN
INSERT ВыдачаКниг
VALUES (@bilet,@shifr,@datavyd, @datavozvr,@shtraf)
END
GO
Проверка:
INSERT v12
VALUES(1,'Книголюбов',8,'Муму',cast('2009-09-03' as datetime),cast('2009-09- 20' as datetime),100)