Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лаба13БД

.doc
Скачиваний:
36
Добавлен:
15.04.2015
Размер:
54.27 Кб
Скачать

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

РГРТУ

Кафедра ЭВМ

Отчет

о лабораторной работе №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)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]