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

4 курс (заочка) / Лабораторные работы / Лабораторная работа 7-8

.docx
Скачиваний:
31
Добавлен:
08.01.2022
Размер:
213.03 Кб
Скачать

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

ОРДЕНА ТРУДОВОГО КРАСНОГО ЗНАМЕНИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ БЮДЖЕТНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ

Кафедра «Интеллектуальные системы в управлении и автоматизации»

Лабораторные работы №7-8

По дисциплине «Технологии баз данных»

Выполнила: Иванова Иоанна, студентка группы БСТ17xx

Цель работы

Освоить написание триггеров на языке PL/SQL в СУБД Oracle. Изучить словарь данных в СУБД Oracle.

Задачи

  1. Создать предваряющий триггер

  2. Создать завершающий триггер

  3. Создать замещающий триггер

  4. Получить информацию из словаря данных

Ход выполнения

  1. Модифицируем таблицу TRANSACTION добавив новый столбец под именем AskingPrice:

Рисунок 1- таблица TRANSACTION после добавления новой колонки

  1. Создаем предваряющий триггер New_Price

  1. CREATE OR REPLACE TRIGGER New_Price

  2. BEFORE INSERT OR UPDATE of ACQUISITIONPRACE ON TRANSACTION

  3. FOR EACH ROW

  4. BEGIN

  5. :new.AskingPrice := :new.AcquistionPrice * 2;

  6. END;

  1. Проверяем созданный тригер

Рисунок 2- транзакция до применения триггера

Рисунок 3- транзакция после обновления ACQUISITIONPRACE и применения триггера

  1. Пишем завершающий триггер

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;

  1. Добавляем строку в WORK чтобы проверить триггер

insert into work values (workId.nextVal, null, 'Some work', 'copy', artistId.currVal);

  1. Проверяем результат работы триггера. Видим новую транзакцию

Рисунок 4- транзакция после обновления WORK и применения триггера On_WORK_Insert

  1. Пишем замещающий триггер

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;

  1. Проверяем его работу, видим успешное выполнение

Рисунок 5- Результат выполнения замещающего триггера

  1. Смотрим словарь данных.

Рисунок 6- Таблица данных Oracle

  1. Смотрим на столбцы внутренней таблицы USER_TABLES

Рисунок 7- Столбцы системной таблицы USER_TABLE

Выводы

В процессе выполнения данной работы были освоены навыки написания различных видов триггеров на языке PL/SQL.

Москва, 2020