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

tbd78

.docx
Скачиваний:
14
Добавлен:
28.06.2021
Размер:
122.24 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

Ордена Трудового Красного Знамени

Федеральное государственное бюджетное образовательное учреждение высшего образования

МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

ЛАБОРАТОРНАЯ РАБОТА №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

Соседние файлы в предмете Базы данных