Приобрести практические навыки разработки и применения хранимых программных модулей в реляционной базе данных с использованием языка PL/SQL, а также освоить технологии автоматизации бизнес-логики за счёт реализации процедур, функций и триггеров, обеспечивающих целостность, согласованность и расширяемость данных.
Отчет следует оформлять в формате docx-документа в соответствии с ГОСТ 7.32-2017. Он должен содержать:
Титульный лист;
Текст цели лабораторной работы, общего задания и задания по варианту;
Код запросов по каждому пункту задания;
Снимки экрана или фрагменты снимков с изображением результата выполнения запросов по каждому пункту задания;
ВАЖНО: убедиться, что масштаб изображенного на снимке хорошо виден при масштабе страницы 100%.
Вывод о проделанной работе.
Направлять вложением в приличное письмо на электронную почту преподавателя сразу по готовности.
Написать процедуру, выполняющую следующую операцию:
Для клиента определяется продавец, заключивший максимальное количество сделок.
Во всех заказах клиента проставляется этот продавец .
Если несколько продавцов имеют для клиента одинаковое количество сделок, то без изменений.
Написать функцию, вычисляющую значение средней суммы сделок за заданный период для определенного продавца.
Написать триггер, вставляющий запись в таблицу Audit(user_name, date, onum) при каждой вставке строки в таблицу Orders. (функция user, таблица dual).
Написать триггер автоматически устанавливающий уникальное значение cnum при вставке в таблицу Customers. (последовательности (sequence))
Добавить в таблицу Customer столбец ord_number.
Написать триггер, увеличивающий на единицу значение этого столбца при вставке записи в таблицу Orders.
Написать процедуру, выполняющую следующую операцию:
Создать альбом из трех песен которые наиболее часто встречаются в других альбомах.
Написать функцию, вычисляющую отношение продолжительности звучания определенного альбома к средней величине продолжительности звучания альбома.
Написать триггер, вставляющий запись в таблицу Аудит(имя_польз, дата, код_альб) при каждой вставке строки в таблицу Альбом. (функция user, таблица dual)
Написать триггер автоматически устанавливающий уникальное значение код_альб при вставке в таблицу Альбом. (последовательности (sequence))
Добавить в таблицу Альбом столбец кол_песен.
Написать триггер, увеличивающий на единицу значение этого столбца при вставке записи в таблицу Песня_из_альбома.
Написать процедуру, выполняющую следующую операцию:
Для двух любых помещений поменять их виды местами при условии, что они находятся в одном здании.
Написать функцию, вычисляющую значение средней площади помещений за заданный период для определенного здания.
Написать триггер, вставляющий запись в таблицу UserData (user_name, date, id_building) при каждой вставке строки в таблицу Building. (функция user, таблица dual)
Написать триггер автоматически устанавливающий уникальное значение id_building и id_premises при вставке в таблицу Building и Premises. (последовательности (sequence))
Добавить в таблицу Premises столбец prem_number.
Написать триггер, увеличивающий на единицу значение этого столбца при вставке записи в таблицу Kind_premises.
Написать процедуру, выполняющую следующую операцию:
Заселить человека в комнату:
если у человека есть текущее проживание, то выселить его с предыдущей комнаты;
если предыдущего проживания нету – заселить в любую свободную комнату.
Написать функцию, вычисляющую количество свободных комнат, по выбранному зданию на указанную дату.
Написать триггер, устанавливающий значение поля id_bas_sal_date на текущую дату при добавлении записи в Residing.
Написать триггер автоматически устанавливающий уникальное значение id_settling при вставке в таблицу Settling. (последовательности (sequence))
Добавить в таблицу Warrant столбец Kol_war.
Написать триггер, увеличивающий на единицу значение этого столбца при вставке записи в таблицу Settling.
Написать функцию, вычисляющую значение средней суммы сделок за заданный период для всех продавцов.
Написать триггер, вставляющий запись в таблицу UserSample (user_name, date, cnum) при каждой вставке строки в таблицу Customer. (функция user, таблица dual)
Написать триггер автоматически устанавливающий уникальное значение onum при вставке в таблицу Orders. (последовательности (sequence))
Добавить в таблицу Salespeople столбец sal_number.
Написать триггер, увеличивающий на единицу значение этого столбца при вставке записи в таблицу Orders.
Написать процедуру, выполняющую следующую операцию:
Для клиента определяется продавец, заключивший минимальное количество сделок.
Во всех заказах клиента проставляется этот продавец .
Если несколько продавцов имеют для клиента одинаковое количество сделок, то выбрать того продавца, у которого в имени больше букв.
Написать триггер автоматически устанавливающий уникальное значение id_building при вставке в таблицу Building. (последовательности (sequence))
Написать функцию, вычисляющую значение общей площади всех помещений за заданный период для всех зданий.
Написать процедуру, выполняющую следующую операцию:
Для двух любых зданий поменять их виды местами при условии, что поле примечание (Building.b_note) не пусто.
Написать триггер, вставляющий запись в таблицу UsersSampleData (user_name, date, id_premises) при каждой вставке строки в таблицу Premises. (функция user, таблица dual)
Добавить в таблицу Building столбец build_number.
Написать триггер, увеличивающий на единицу значение этого столбца при вставке записи в таблицу Kind_building.
DECLARE - не обязателен - Раздел объявлений. Указываются переменные, курсоры и т.д.
BEGIN - обязателен - Исполняемый раздел Основные операторы DDL и DML.
EXCEPTION - не обязателен - Раздел исключений. Обрабатываются ошибки.
END;
Create [or replace] procedure имя_процедуры
[{аргумент[{IN|OUT|IN OUT }]тип,
. . .
[{аргумент[{IN|OUT|IN OUT }]тип)]{IS|AS}
тело_процедуры
Create [or replace] function имя_функции
[{аргумент[{IN|OUT|IN OUT }]тип,
. . .
[{аргумент[{IN|OUT|IN OUT }]тип)]
RETURN возвращаемый_тип{IS|AS}
тело_функции
CREATE [OR REPLACE] TIGGER имя_триггера
{BEFORE | AFTER} активизирующее_событие ON ссылка_на_таблицу
[FOR EACH ROW [WHEN условие_срабатывания]]
тело_триггера;
CREATE SEQUENCE название_последовательности
START WITH начальное_число
INCREMENT BY шаг_изменения;
где
название_последовательности - имя объекта,которое будет использоваться в качестве последовательности;
начальное_число – число, с которого начинают генерироваться значения последовательности;
шаг_изменения- шаг изменения генерируемых значений последовательности.
Для выполнения данной лабораторной работы можно развернуть СУБД Oracle на своем компьютере. Чтобы не мучиться с нюансами установки, можно воспользоваться готовым docker-образом и просто запустить его у себя.
Организовать у себя Docker и разобраться, как с ним работать (по жизни полезно): https://habr.com/ru/articles/310460/ или https://selectel.ru/blog/tutorials/how-to-create-docker-image/ или в свободном режиме.
Скачать образ (~4Гб): docker pull quay.io/maksymbilenko/oracle-12c
Запустить контейнер (время инициализации ~5-10 мин):
docker run -d -p 8080:8080 -p 1521:1521 quay.io/maksymbilenko/oracle-12c
Или если запуск через windows-приложение: optimistic_wing
Параметры доступа от имени системной учетной записи:
hostname: localhost
port: 1521
sid: xe
service name: xe
username: system
password: oracle
Для корректной работы необходимо создать стандартную учетную запись, выполнить вход и выполнять задание от её имени.
Источник: https://github.com/MaksymBilenko/docker-oracle-12c