Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лабораторна робота 13 Тригери Виконав студент групи СПс31 Підгайний Олександр Терно

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 2.11.2024

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ УКРАЇНИ

ТЕРНОПІЛЬСЬКИЙ ТЕХНІЧНИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ

Факультет комп’ютерно – інформаційних систем та програмної інженерії

Кафедра програмної інженерії

Лабораторна робота № 13

Тригери

Виконав

студент групи СПс-31

Підгайний Олександр

Тернопіль – 2013

Мета роботи: Набути навичок по використанню різноманітних тригерів подій при роботі з СУБД

Завдання: Cтворити тригер контролю обмежень цілісності, виконати скрипти, підготовлені для перевірки тригера і зберегти протокол їх виконання. Вивести вміст таблиць, що показує дію тригерів.

Хід роботи

Проаналізувавши роботу своєї бази даних, було зроблени висновок, що необхідна деяка автоматизація. А саме, при добавленні, оновленні, або видалені товару із замовлення, була постійна необхідність вручну змінювати значення поля кінцевою вартості замовлення вручну. Для того щоб автоматизувати цей процес було вирішено написати для кожного типу товару, по 3 тригери:

  1.   FOR INSERTданий тригер спрацьовував би при добавленні товару до замовлення і автоматично сумував би значення вартості товару з вартістю замовлення;
  2.  FOR UPDATEданий тригер спрацьовував би при оновленні даних про товару і відповідно мінусував би старе значення вартості і сумував би нове значення;
  3.  FOR DELETE – даний тригер спрацьовував би при видаленні товару і відповідно мінусував значення вартості товару від значення замовлення;

Для того щоб створити новий тригер у 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].

Тестування даних тригерів будемо проводити за насутпним планом:

  1.  Обераємо будь яке замовлення і фіксуємо в ньому значення поля Profit;
  2.  Додаємо новий запис в таблиці зі значенням деякого замовлення;
  3.  Оновлюємо таблицю [dbo].[Orders], перевіряємо результат;
  4.  Редагуваємо той же запис в таблиці;
  5.  Оновлюємо таблицю [dbo].[Orders], перевіряємо результат;
  6.  Видаляємо той же запис;
  7.  Оновлюємо таблицю [dbo].[Orders], перевіряємо результат;

Обираємо замовлення під номером 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.




1. Учет и распределение накладных расходов
2. По плану грузоподъемный кран должен использоваться в 2 смены
3. МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ по выполнению контрольных и курсовых работ для слушателей 4 курса юридическо
4. О внесении изменений и дополнений в постановление Министерства здравоохранени
5. серебряного века
6. ЕДА Овощи и др- vegetbleовощи cucumber огурец crrot морковь per груша tomto томат mushrooms грибыpotto
7. реферат дисертації на здобуття наукового ступеня кандидата медичних наук Харків ~ 2001 Дисертацією є
8. На тему- Разработка стратегии предприятия ОАО АвтоВАЗ на основе анализа внешней и внутренней среды
9. на тему- Стихи и песни о Великой Отечественной войне
10. Тэффи
11. Торжество посвященное Дню лицеиста можно считать открытым
12. философия а Платон б Сократ в Пифагор г Зенон 2
13. The phoneme is the smllest linguistic unit which is cpble of differentiting the mening nd the grmmr forms of words
14. Адан Поль
15. по теме- Ребёнок и родитель на пороге школы
16. Комплексное решение в стратегии завоевания клиента
17. Н Синтетические аналоги ювелирных камней- Учеб
18. Рыжая цапл
19. Технологический расчет горячего цеха интернеткафе
20. Утвердить прилагаемые- Правила предоставления субвенций из федерального бюджета бюджетам субъектов Росс