tbd78
.docxФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
Ордена Трудового Красного Знамени
Федеральное государственное бюджетное образовательное учреждение высшего образования
МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
ЛАБОРАТОРНАЯ РАБОТА №7-8
по дисциплине «ТЕХНОЛОГИИ БАЗ ДАНЫХ»
Кафедра ИСУиА
Выполнил:
МОСКВА, 2018 г.
Цель работы:
Знакомство с различными триггерами в Oracle.
Задачи:
Освоить создание и запуск триггеров в Oracle.
Ход работы:
Перед созданием триггера необходимо изменить таблицу TRANSACTION, добавив в нее столбец AskingPrice. Далее создадим предваряющий триггер. Данный триггер срабатывает перед любой вставкой или обновлением столбца AcquisitionPrice. Текст приведен ниже:
CREATE OR REPLACE TRIGGER NewPrice
BEFORE INSERT OR UPDATE OF AcquisitionPrice ON TRANSACTION
FOR EACH ROW
BEGIN
:new.AskingPrice:=:new.AcquisitionPrice*2;
END;
/
Компиляция триггера и результаты работы представлены на рисунке №1
Рисунок 1 – Результат работы триггера NewPrice
Создадим завершающий триггер, задача которого – гарантировать, чтобы существовала строка в таблице TRANSACTION с пустым значением CustomerID для добавленного произведения. Текст триггера приведен ниже:
CREATE OR REPLACE TRIGGER OnWorkInsert
AFTER INSERT ON WORK
FOR EACH ROW
DECLARE
rowcount int(2);
BEGIN
SELECT COUNT(*) INTO rowcount FROM TRANSACTION WHERE CustomerID IS NULL AND WorkID=:new.WorkID;
IF rowcount > 0 THEN
DBMS_OUTPUT.PUT_LINE('No proper row exist. Nothing happened');
RETURN;
ELSE
INSERT INTO TRANSACTION(TransactionID, DateAcquired, WorkID) VALUES (TransID.NextVal, SYSDATE, :new.WorkId);
END IF;
END;
/
Компиляция триггера и результаты работы приведены на рисунках 2-4.
Р исунок 2 – Создание триггера
Рисунок 3 – Результат работы триггера
Р исунок 4 – Результат работы триггера
Замещающие триггеры используются для обновления представлений. Создадим представление. Его текст представлен ниже:
CREATE VIEW CustomerPurchases AS
SELECT Customer.Name CustName, Copy, Title, Artist.Name ArtistName
FROM CUSTOMER, TRANSACTION, WORK, ARTIST
WHERE Customer.CustomerID = Transaction.CustomerID AND Transaction.WorkID = Work.WorkID AND Work.ArtistID = Artist.ArtistID;
Результаты вызова данного представления можно увидеть на рисунке 5
Рисунок 5 – Вызов представления CustomerPurchases
Создадим триггер, который будет изменять таблицу WORK при обновлении столбца Title в представлении CustomerPurchases. Его текст представлен ниже:
CREATE OR REPLACE TRIGGER TitleUpdate INSTEAD OF UPDATE ON CustomerPurchases
FOR EACH ROW
BEGIN
IF :new.Title=:old.Title THEN
RETURN;
END IF;
UPDATE WORK SET Title=:new.Title WHERE Title=:old.Title;
END;
К омпиляцию и результат работы триггера можно увидеть на рисунке 6.
Рисунок 6 – Результат работы триггера TitleUpdate