
Чурилов / 3 курс 2 семестр / Чурилов_БД_Z9411_ЛР7
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ
Кафедра проблемно-ориентированных вычислительных комплексов
ОЦЕНКА
ПРЕПОДАВАТЕЛЬ
кандидат техн. наук _________________ Е.Л. Турнецкая
подпись, дата
ЛАБОРАТОРНАЯ РАБОТА №7
Создание и вызов хранимых функций
по дисциплине «Базы данных»
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. Z9411 __________________ А.С. Чурилов
подпись, дата
Студенческий билет № 2019/3684
Санкт-Петербург
2022г.
Оглавление
1. Цель работы 3
2. Создание функции с операторами ветвления 3
3. Создание функции с циклическими конструкциями 5
4. Просмотр списка функций 8
Заключение 8
Список источников 10
Цель работы
Цель лабораторной работы: изучить операции по созданию хранимых функций на сервере MySQL.
Создание функции с операторами ветвления
Для выполнения работы воспользуемся базой данных DBtheatre, характеризующей информационную систему «Театр». Соответствующая даталогическая модель представлена на рисунке 1.
|
Рисунок 1 – Даталогическая модель информационной системы «Театра» |
Начнём работу в среде разработки MySQL Workbench. Создадим хранимую функцию, где будут использоваться вложенные операторы ветвления.
Реализуем функцию под названием «func1», которой на вход будет передаваться код репертуара id_rp, интересующий пользователя. После проверки алгоритмом, что задано корректное значение и такой номер театральной программы действительно существует, на экран будет выводиться название спектакля, соответствующее введенному идентификатору, дни представлений и стоимость билета.
На рисунке 2 приведен полный вид таблицы repertoire.
|
Рисунок 2 – Записи таблицы repertoire |
Для решения поставленной задачи пропишем следующую программную инструкцию:
DELIMITER //
use DBtheatre //
create function func1 (id_rp int)
returns text
not deterministic
no sql
sql security definer
begin
declare last_id int default 5;
declare first_id int default 1;
declare name_per tinytext;
declare day_time tinytext;
declare cost int default 0;
if id_rp < 1 then
return ('Введено некорректное значение кода репертуара!');
elseif id_rp > last_id then
return ('Введенный код репертуара отсутствует!');
else
label: while first_id <= last_id do
select name_perf_repert into name_per from DBtheatre.repertoire where id_repert = id_rp limit 1;
select day_time_repert into day_time from DBtheatre.repertoire where id_repert = id_rp limit 1;
select cost_ticket into cost from DBtheatre.repertoire where id_repert = id_rp limit 1;
set first_id = first_id + 1;
end while label;
return concat('Заданному номеру репертуара соответствует спектакль ', name_per, '. Дни представлений: ', day_time, '. Стоимость билетов: ', cost);
end if;
end //
Осуществим вызов функции func1, передавая ей параметр id_rp=3. Выполним следующий программный код:
set @temp = func1(3) //
select @temp //
На рисунке 3 приведен результат работы алгоритма функции func1.
|
Рисунок 3 – Результат работы функции func1 при вводе корректного параметра |
Осуществим вызов функции func1, передавая ей параметр id_rp=-1. Выполним следующий программный код:
set @temp = func1(-1) //
select @temp //
На рисунке 4 приведен результат работы алгоритма функции func1.
|
Рисунок 4 – Результат работы функции func1 при вводе некорректного параметра |
Осуществим вызов функции func1, передавая ей параметр id_rp=10. Выполним следующий программный код:
set @temp = func1(10) //
select @temp //
На рисунке 5 приведен результат работы алгоритма функции func1.
|
Рисунок 5 – Результат работы функции func1 при вводе несуществующего значения параметра |
Как видно из рисунков 3-5, функция func1 работает корректно.
Создание функции с циклическими конструкциями
В среде разработки MySQL Workbench создадим хранимую функцию, где будут использоваться циклические конструкции.
Реализуем функцию под названием «func2», которой на вход передается три параметра: левая и правая границы кодов сотрудников f_id и l_id и количество лет рабочего стажа exp_us. После проверки алгоритмом, что введены корректные значения индивидуальных номеров, на экран будет выводиться число сотрудников, служащих в театре не менее заданной величины exp_us.
На рисунке 6 приведен полный вид таблицы employees.
|
Рисунок 6 – Записи таблицы employees |
Для решения поставленной задачи пропишем следующую программную инструкцию:
DELIMITER //
use DBtheatre //
create function func2 (f_id int, l_id int, exp_us int)
returns text
not deterministic
no sql
sql security definer
begin
declare exp int default 0;
declare counter int default 0;
if f_id < 1 or l_id < 1 then
return('Введены некорректные значения кодов сотрудников!');
elseif l_id > 5 then
return('Заданного кода сотрудника не существует!');
else
label: while f_id <= l_id do
select exp_emp into exp from DBtheatre.employees where id_emp = f_id limit 1;
if exp >= exp_us then
set counter = counter + 1;
end if;
set f_id = f_id + 1;
end while label;
if counter = 0 then
return('Сотрудников с опытом не менее заданного нет.');
else
return concat('Среди сотрудников театра всего ', counter, ' работает не менее ', exp_us, '. ');
end if;
end if;
end //
Осуществим вызов функции func2, передавая ей параметры f_id=1, l_id=5, exp_us=10. Выполним следующий программный код:
set @temp = func2(1, 5, 10) //
select @temp //
На рисунке 7 приведен результат работы алгоритма функции func2.
|
Рисунок 7 – Результат работы функции func2 при вводе параметров f_id=1, l_id=5, exp_us=10 |
Осуществим вызов функции func2, передавая ей параметры f_id=1, l_id=5, exp_us=15. Выполним следующий программный код:
set @temp = func2(1, 5, 15) //
select @temp //
На рисунке 8 приведен результат работы алгоритма функции func2.
|
Рисунок 8 – Результат работы функции func2 при вводе параметров f_id=1, l_id=5, exp_us=15 |
Осуществим вызов функции func2, передавая ей параметры f_id=1, l_id=5, exp_us=20. Выполним следующий программный код:
set @temp = func1(1, 5, 20) //
select @temp //
На рисунке 9 приведен результат работы алгоритма функции func2.
|
Рисунок 9 – Результат работы функции func2 при вводе f_id=1, l_id=5, exp_us=20 |
Осуществим вызов функции func2, передавая ей параметры f_id=0, l_id=5, exp_us=10. Выполним следующий программный код:
set @temp = func2(0, 5, 10) //
select @temp //
На рисунке 10 приведен результат работы алгоритма функции func2.
|
Рисунок 10 – Результат работы функции func2 при вводе f_id=0, l_id=5, exp_us=10 |
Осуществим вызов функции func2, передавая ей параметры f_id=1, l_id=10, exp_us=10. Выполним следующий программный код:
set @temp = func1(1, 10, 10) //
select @temp //
На рисунке 11 приведен результат работы алгоритма функции func1.
|
Рисунок 11 – Результат работы функции func2 при вводе f_id=1, l_id=10, exp_us=10 |
Как видно из рисунков 7-11, функция func2 работает корректно.
Просмотр списка функций
Для ознакомления со списком хранимых функций воспользуемся командой show function status.
На рисунке 12 представлен перечень хранимых функций в среде разработки MySQL Workbench.
|
Рисунок 12 – Перечень хранимых функций |
Заключение
В результате выполнения лабораторной работы были реализованы следующие задачи:
приобретены знания по применению переменных различного типа;
получены практические навыки работы с операторами ветвления и циклическими конструкциями на языке SQL;
изучены операции по созданию хранимых функций в среде разработки MySQL Workbench.
Список источников
Кригель, А. SQL. Библия пользователя. [Текст] / А. Кригель. – Москва: Вильямс, 2010. – 752 с.
Кузин, А.В. Разработка баз данных в системе Microsoft Access. Учебник. [Текст] / А.В. Кузин. – Санкт-Петербург: Форум, 2021. – 224 с.
Кумскова, И.А. Базы данных. Учебник. [Текст] / И.А. Кумскова. – Москва: Кнорус, 2021. – 400 с.
Свиридова, М.Ю. Система управления базами данных Access. [Текст] / М.Ю. Свиридова. – Москва: Academia, 2010. – 192 с.
Гурвиц, Г.А. Microsoft Access 2021. Разработка приложений на реальном примере. [Текст] / Г.А. Гурвиц. – Москва: Лань, 2021. – 502 с.