
Чурилов / 3 курс 2 семестр / Чурилов_БД_Z9411_ЛР6
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ
Кафедра проблемно-ориентированных вычислительных комплексов
ОЦЕНКА
ПРЕПОДАВАТЕЛЬ
кандидат техн. наук _________________ Е.Л. Турнецкая
подпись, дата
ЛАБОРАТОРНАЯ РАБОТА №6
Создание и вызов хранимых процедур
по дисциплине «Базы данных»
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. Z9411 __________________ А.С. Чурилов
подпись, дата
Студенческий билет № 2019/3684
Санкт-Петербург
2022г.
Оглавление
1. Цель работы 3
2. Создание процедур с глобальными переменными и операторами ветвления 3
3. Создание процедуры с переменными различного типа и циклическими конструкциями 6
4. Просмотр списка процедур 7
Заключение 8
Список источников 9
Цель работы
Цель лабораторной работы: изучить операции по созданию хранимых процедур на сервере MySQL.
Создание процедур с глобальными переменными и операторами ветвления
Для выполнения работы воспользуемся базой данных DBtheatre, характеризующей информационную систему «Театр». Соответствующая даталогическая модель представлена на рисунке 1.
|
Рисунок 1 – Даталогическая модель информационной системы «Театра» |
Начнём работу в среде разработки MySQL Workbench. Создадим хранимую процедуру, где будут использоваться глобальные переменные и операторы ветвления.
Реализуем процедуру под названием «proc1», которой на вход будет передаваться целочисленное значение x. После определения алгоритмом численного диапазона, куда попадает величина переменной, по заданным формулам будут находиться показатели трёх параметров (a, b, c). В таблице 1 приведены условия вычисления переменных a, b, c и выражения, необходимые для этого.
Таблица 1 – Условия вычисления выходных параметров процедуры proc1 |
|||
Входной параметр x |
Переменная a |
Переменная b |
Переменная c |
< 0 |
|x| + 10 |
|
|
≤ 15 |
|x| |
|
|
≤ 30 |
|x| - 10 |
- 10 |
- 10 |
> 30 |
Ошибка: «Введено слишком большое число» |
Для решения поставленной задачи пропишем следующую программную инструкцию:
DELIMITER //
use DBtheatre //
create procedure proc1 (in temp int)
begin
set @x = temp;
if @x < 0 then
set @a = abs(temp) + 10;
set @b = power(temp, 2) + 10;
set @c = power(temp, 3) + 10;
elseif @x <= 15 then
set @a = abs(temp);
set @b = power(temp, 2);
set @c = power(temp, 3);
elseif @x <= 30 then
set @a = abs(temp) - 10;
set @b = power(temp, 2) - 10;
set @c = power(temp, 3) - 10;
else
select 'Введено слишком большое число';
end if;
end //
Осуществим вызов процедуры proc1, передавая ей параметр y=-3. Выполним следующий программный код:
set @y = -3 //
call proc1 (@y) //
select @x, @a, @b, @c //
На рисунке 2 приведен результат работы алгоритма процедуры proc1.
|
Рисунок 2 – Результат работы процедуры proc1 при выполнении первого условия |
Осуществим вызов процедуры proc1, передавая ей параметр y=12. Выполним следующий программный код:
set @y = 12 //
call proc1 (@y) //
select @x, @a, @b, @c //
На рисунке 3 приведен результат работы алгоритма процедуры proc1.
|
Рисунок 3 – Результат работы процедуры proc1 при выполнении второго условия |
Осуществим вызов процедуры proc1, передавая ей параметр y=23. Выполним следующий программный код:
set @y = 23 //
call proc1 (@y) //
select @x, @a, @b, @c //
На рисунке 4 приведен результат работы алгоритма процедуры proc1.
|
Рисунок 4 – Результат работы процедуры proc1 при выполнении третьего условия |
Осуществим вызов процедуры proc1, передавая ей параметр y=50. Выполним следующий программный код:
set @y = 50 //
call proc1 (@y) //
select @x, @a, @b, @c //
На рисунке 5 приведен результат работы алгоритма процедуры proc1.
|
Рисунок 5 – Результат работы процедуры proc1 при выполнении четвертого условия |
Как видно из рисунков 2-5, процедура proc1 работает корректно.
Создание процедуры с переменными различного типа и циклическими конструкциями
Создадим хранимую процедуру, где будут использоваться переменные различного типа и циклические структуры.
Реализуем процедуру под названием «proc2», вычисляющую максимальную сумму денежных средств, которую сможет заработать театр при условии полной посадки в зале. На вход программа будет получать два параметра: первый номер репертуара и последний. Перебирая от стартового значения до конечного, алгоритм будет складывать стоимости билетов. Полученная сумма затем будет умножена на количество мест в зале, что в результате и послужит максимальной выручкой театра. Предположим, что спектакли ставятся в небольшом зале на 800 мест.
На рисунке 6 приведен полный вид таблицы repertoire.
|
Рисунок 6 – Записи таблицы repertoire |
Для решения поставленной задачи пропишем следующую программную инструкцию:
DELIMITER //
USE DBtheatre //
create procedure proc2 (IN first_id INT, IN last_id INT)
begin
declare cost int default 0;
declare cost_sum int default 0;
declare sits int default 800;
set @max_sum = 0;
if (first_id > 0 and last_id > 0 and last_id < 6) THEN
label: while first_id <= last_id do
select cost_ticket into cost from DBtheatre.repertoire where id_repert = first_id limit 1;
set cost_sum = cost_sum + cost;
set first_id = first_id + 1;
end while label;
set @max_sum = cost_sum * sits;
else
select "Введен неверный номер репертуара театра";
end if;
end //
Осуществим вызов процедуры proc2, передавая ей в качестве параметров first_id=1 и last_id=4. Выполним следующий программный код:
set @first_id = 1, @last_id = 4 //
call proc2(@first_id, @last_id) //
select @max_sum //
На рисунке 7 приведен результат работы алгоритма процедуры proc2.
|
Рисунок 7 – Результат работы процедуры proc2 при вводе корректных данных |
Осуществим вызов процедуры proc2, передавая ей в качестве параметров first_id=1 и last_id=7. Выполним следующий программный код:
set @first_id = 1, @last_id = 7 //
call proc2(@first_id, @last_id) //
select @max_sum //
На рисунке 8 приведен результат работы алгоритма процедуры proc2.
|
Рисунок 8 – Результат работы процедуры proc2 при вводе некорректных данных |
Как видно из рисунков 7-8, процедура proc2 успешно справляется с поставленным заданием.
Просмотр списка процедур
Для ознакомления со списком хранимых процедур воспользуемся командой show procedure status.
На рисунке 9 представлен перечень хранимых процедур в среде разработки MySQL Workbench.
|
Рисунок 9 – Перечень хранимых процедур |
Заключение
В результате выполнения лабораторной работы были реализованы следующие задачи:
приобретены знания по применению переменных различного типа;
получены практические навыки работы с операторами ветвления и циклическими конструкциями на языке SQL;
изучены операции по созданию хранимых процедур в среде разработки MySQL Workbench.
Список источников
Кригель, А. SQL. Библия пользователя. [Текст] / А. Кригель. – Москва: Вильямс, 2010. – 752 с.
Кузин, А.В. Разработка баз данных в системе Microsoft Access. Учебник. [Текст] / А.В. Кузин. – Санкт-Петербург: Форум, 2021. – 224 с.
Кумскова, И.А. Базы данных. Учебник. [Текст] / И.А. Кумскова. – Москва: Кнорус, 2021. – 400 с.
Свиридова, М.Ю. Система управления базами данных Access. [Текст] / М.Ю. Свиридова. – Москва: Academia, 2010. – 192 с.
Гурвиц, Г.А. Microsoft Access 2021. Разработка приложений на реальном примере. [Текст] / Г.А. Гурвиц. – Москва: Лань, 2021. – 502 с.