close

Вход

Забыли?

вход по аккаунту

?

Lab4(СУБД)(1)

код для вставкиСкачать
ГБОУ ВПО "Сургутский государственный университет
Ханты-Мансийского автономного округа - Югры"
Политехнический институт
Кафедра автоматики и компьютерных систем
ОТЧЕТ
по лабораторной работе №4
по дисциплине "СУБД"
Выполнил: студент группы 1294
Мирземетов С.Д.
Принял: к.т.н., доцент Кузин Д.А.
Сургут, 2013 г.
Исключения и триггеры
1. Реализовать триггер, автоматически добавляющий к имени детали символ '-' и порядковый номер детали (с учетом уже имеющихся одноименных деталей в базе) при добавлении каждой новой детали в таблицу. Т.е. детали должны получать уникальные имена "Деталь-1", "Деталь-2", "Деталь-3" и т.д.
DELIMITER //
CREATE TRIGGER TRIGGER_1 BEFORE INSERT ON Parts FOR EACH ROW
BEGIN
DECLARE N INTEGER;
SELECT COUNT(*) INTO N FROM Parts WHERE Part_name LIKE CONCAT(NEW.Part_name,'-%'); SET NEW.Part_name = CONCAT(NEW.Part_name,'-',N+1); END
//
Содержимое таблицы Детали до модификации
Содержимое таблицы Детали после модификации
2. Реализовать триггер, ограничивающий максимальную суммарную стоимость всех деталей, поставляемых для определенного проекта.
DELIMITER //
CREATE TRIGGER TRIGGER_2 BEFORE INSERT ON Delivery FOR EACH ROW
BEGIN
DECLARE M_SUM CONDITION FOR SQLSTATE '45000';
DECLARE SUMM INTEGER;
SELECT SUM(Price*Quantity) INTO SUMM FROM Delivery WHERE Project_ID=NEW.Project_ID; IF NEW.Price*NEW.Quantity + SUMM > 10000 THEN SIGNAL M_SUM SET MESSAGE_TEXT = 'Суммарная стоимость проекта превышает 10000!';
END IF;
END
//
Содержимое таблицы Поставки до модификации
Содержимое таблицы Поставки после модификации
3. Реализовать триггер, ограничивающий максимальный суммарный вес всех деталей, поставляемых для определенного проекта.
DELIMITER //
CREATE TRIGGER TRIGGER_3 BEFORE INSERT ON Delivery FOR EACH ROW
BEGIN
DECLARE Max_weight CONDITION FOR SQLSTATE '45000';
DECLARE W, New_weight INTEGER;
SELECT SUM(Delivery.Quantity*Parts.Weigth) INTO W FROM Delivery, Parts WHERE Delivery.Project_ID=NEW.Project_ID AND Delivery.Part_ID=Parts.Part_ID;
SELECT W INTO New_weight FROM Parts WHERE Part_ID = NEW.Part_ID;
IF NEW.Quantity*New_weight + W > 10000 THEN SIGNAL Max_weight SET MESSAGE_TEXT = 'Суммарная вес деталей поставляемых для проекта превышает 10000!';
END IF;
END
//
Содержимое таблицы Поставки до модификации
Содержимое таблицы Поставки после модификации
4. Реализовать триггер, который разрешает только поставки, в которых поставщик и проект находятся в одном городе.
CREATE TRIGGER TRIGGER_4 BEFORE INSERT ON Delivery FOR EACH ROW
BEGIN
DECLARE Dif_town CONDITION FOR SQLSTATE '45000';
DECLARE Town_ID1, TOWN_ID2 INTEGER;
SELECT City_ID INTO Town_ID1 FROM Projects WHERE Projects.Project_ID = NEW.Project_ID;
SELECT City_ID INTO Town_ID2 FROM Suppliers WHERE Suppliers.Supplier_ID = NEW.Supplier_ID;
IF Town_ID1 <> Town_ID2 THEN SIGNAL Dif_town SET MESSAGE_TEXT = 'Поставщик и проект находятся в разных городах!';
END IF;
END
Содержимое таблиц до модификации
Содержимое таблицы Поставки после модификации
5. Реализовать триггер, который удаляет проект при удалении последней поставки для данного проекта.
CREATE TRIGGER TRIGGER_5 AFTER DELETE ON Delivery FOR EACH ROW
BEGIN
DECLARE N INTEGER;
SELECT COUNT(*) INTO N FROM Delivery WHERE Project_ID = OLD.Project_ID;
IF N=0 THEN DELETE FROM Projects WHERE Project_ID = OLD.Project_ID; END IF;
END
Содержимое таблиц до модификации
Содержимое таблиц после модификации
Документ
Категория
Рефераты
Просмотров
50
Размер файла
235 Кб
Теги
лабораторная работа, lab4, лаба, субд, лабораторная
1/--страниц
Пожаловаться на содержимое документа