Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ УКРАЇНИ
ТЕРНОПІЛЬСЬКИЙ ТЕХНІЧНИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ
Факультет компютерно інформаційних систем та програмної інженерії
Кафедра програмної інженерії
Лабораторна робота № 13
Тригери
Виконав
студент групи СПс-31
Підгайний Олександр
Тернопіль 2013
Мета роботи: Набути навичок по використанню різноманітних тригерів подій при роботі з СУБД
Завдання: Cтворити тригер контролю обмежень цілісності, виконати скрипти, підготовлені для перевірки тригера і зберегти протокол їх виконання. Вивести вміст таблиць, що показує дію тригерів.
Хід роботи
Проаналізувавши роботу своєї бази даних, було зроблени висновок, що необхідна деяка автоматизація. А саме, при добавленні, оновленні, або видалені товару із замовлення, була постійна необхідність вручну змінювати значення поля кінцевою вартості замовлення вручну. Для того щоб автоматизувати цей процес було вирішено написати для кожного типу товару, по 3 тригери:
Для того щоб створити новий тригер у Management Studio 2012 необхідно обрати потрібну таблицю, натиснути на папку Triggers і обрати пункт New Trigger… По замовчуванню це СУБД створює запит з насутпним кодом:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE TRIGGER <Schema_Name, sysname, Schema_Name>.<Trigger_Name, sysname, Trigger_Name>
ON <Schema_Name, sysname, Schema_Name>.<Table_Name, sysname, Table_Name>
AFTER <Data_Modification_Statements, , INSERT,DELETE,UPDATE>
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
END
GO
В кінцевому результаті вийшло 3 наступних тригери:
Лістинг коду тригера [TRIGGER_MAGNETS_INSERT]:
USE [MDF]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[TRIGGER_MAGNETS_INSERT]
ON [dbo].[Magnets]
FOR INSERT
AS
BEGIN
DECLARE @ID INT;
DECLARE @VALUE INT;
select @ID = inserted.ID_Order from inserted
select @VALUE = inserted.Full_price from inserted
update [dbo].[Order] set Profit = Profit + @VALUE where ID_Order = @ID
END
Лістинг коду тригера [TRIGGER_MAGNETS_UPDATE]:
USE [MDF]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[TRIGGER_MAGNETS_UPDATE]
ON [dbo].[Magnets]
FOR UPDATE
AS
BEGIN
DECLARE @ID INT;
DECLARE @VALUE INT;
select @ID = deleted.ID_Order from deleted
select @VALUE = deleted.Full_price from deleted
update [dbo].[Order] set Profit = Profit - @VALUE where ID_Order = @ID
select @VALUE = inserted.Full_price from inserted
update [dbo].[Order] set Profit = Profit + @VALUE where ID_Order = @ID
END
Лістинг коду тригера [TRIGGER_MAGNETS_DELETE]:
USE [MDF]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[TRIGGER_MAGNET_DELETE]
ON [dbo].[Magnets]
FOR DELETE
AS
BEGIN
DECLARE @ID INT;
DECLARE @VALUE INT;
select @ID = deleted.ID_Order from deleted
select @VALUE = deleted.Full_price from deleted
update [dbo].[Order] set Profit = Profit - @VALUE where ID_Order = @ID
END
Відповідні тригери з таким самим кодом були створенні для інших 5 таблиць із товарами, єдина різниця між ними в назві тригера(оскільки СУБД неможе містити тригери з одинаковими назвами) та в назві таблиці. Оскільк код фактично одинаковий, тесутвання будемо проводити лише з однією таблицею [dbo].[Magnets].
Тестування даних тригерів будемо проводити за насутпним планом:
Обираємо замовлення під номером 22, в якому значення поля Profit рівне 0 (рис. 1).
Додамо запис в таблицю [dbo].[Magnets] з наступними значеннями полів (рис. 1):
Рисунок 1 Новий запис в таблиці [dbo].[Magnets]
Після добавлення цього запису значення поля Profit в таблиці з відповідним замовленням збільшився на 1000 як і планувалось. Тепер змінимо в тому самому записі значення поля Full_price на 2000. Значення поля в таблиці з відповідним замовленням стало 2000 (рис. 2).
Рисунок 2 Значення запису
Останній тест який необхідний це видалення. Видаливши останній запис, значення поля профіт повернулось на 0. Таблиця проведення тестування тригерів зображена в табиці 1.
Таблиця 1- Тесутвання тригерів
Назва тригера |
Початкове значення |
Очікуване значення |
Отримане значення |
Статус |
TRIGGER_MAGNETS_INSERT |
0 |
1000 |
1000 |
Успішно |
TRIGGER_MAGNETS_UPDATE |
1000 |
2000 |
2000 |
Успішно |
TRIGGER_MAGNETS_DELETE |
2000 |
0 |
0 |
Успішно |
Тестування пройшло успішно.
Висновок: Результатом виконання даної лабораторної роботи є 3 протестованих робочих тригери. Під час виконання даної лабораторної роботи було проаналізовано саму сутність тригерів та важливість їх використання, оскліьки в деяких випадках вони можуть сильно спростити і полегшити процес розробки. Також було вивчино синтаксис та прицнипи написання тригерів для різних подій: INSERT, UPDATE, DELETE.