4 курс (заочка) / Лабораторные работы / Лабораторная работа 7-8
.docxФЕДЕРАЛЬНОЕ АГЕНСТВО СВЯЗИ
ОРДЕНА ТРУДОВОГО КРАСНОГО ЗНАМЕНИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ БЮДЖЕТНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ
Кафедра «Интеллектуальные системы в управлении и автоматизации»
Лабораторные работы №7-8
По дисциплине «Технологии баз данных»
Выполнила: Иванова Иоанна, студентка группы БСТ17xx
Цель работы
Освоить написание триггеров на языке PL/SQL в СУБД Oracle. Изучить словарь данных в СУБД Oracle.
Задачи
Создать предваряющий триггер
Создать завершающий триггер
Создать замещающий триггер
Получить информацию из словаря данных
Ход выполнения
Модифицируем таблицу TRANSACTION добавив новый столбец под именем AskingPrice:
Рисунок 1- таблица TRANSACTION после добавления новой колонки
Создаем предваряющий триггер New_Price
CREATE OR REPLACE TRIGGER New_Price
BEFORE INSERT OR UPDATE of ACQUISITIONPRACE ON TRANSACTION
FOR EACH ROW
BEGIN
:new.AskingPrice := :new.AcquistionPrice * 2;
END;
Проверяем созданный тригер
Рисунок 2- транзакция до применения триггера
Рисунок 3- транзакция после обновления ACQUISITIONPRACE и применения триггера
Пишем завершающий триггер
CREATE OR REPLACE TRIGGER On_WORK_Insert
AFTER INSERT ON WORK
FOR EACH ROW
DECLARE
rowcount integer(2);
BEGIN
SELECT Count (*) INTO rowcount
FROM TRANSACTION
WHERE CUSTOMERID IS NULL AND WORKID=:new.WORKID;
IF rowcount > 0 Then
DBMS_OUTPUT.PUT_LINE ('Подходящая строка в таблице TRANSACTION существует -- никаких действий не предпринято.');
RETURN;
ELSE
INSERT INTO TRANSACTION (TRANSACTIONID, DATEACQUIRED, WORKID)
VALUES (TransID.NextVal, SysDate, :new.WORKID);
END IF;
END;
Добавляем строку в WORK чтобы проверить триггер
insert into work values (workId.nextVal, null, 'Some work', 'copy', artistId.currVal);
Проверяем результат работы триггера. Видим новую транзакцию
Рисунок 4- транзакция после обновления WORK и применения триггера On_WORK_Insert
Пишем замещающий триггер
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- Результат выполнения замещающего триггера
Смотрим словарь данных.
Рисунок 6- Таблица данных Oracle
Смотрим на столбцы внутренней таблицы USER_TABLES
Рисунок 7- Столбцы системной таблицы USER_TABLE
Выводы
В процессе выполнения данной работы были освоены навыки написания различных видов триггеров на языке PL/SQL.
Москва, 2020