Добавил:
t.me Инфо для ГУАП студентов от меня: https://kafaka.notion.site/99e6d9b70ca74f7baef3daea17839e5a Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Чурилов / 3 курс 2 семестр / Чурилов_БД_Z9411_ЛР7

.docx
Скачиваний:
12
Добавлен:
14.10.2024
Размер:
172.74 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ

Кафедра проблемно-ориентированных вычислительных комплексов

ОЦЕНКА

ПРЕПОДАВАТЕЛЬ

кандидат техн. наук _________________ Е.Л. Турнецкая

подпись, дата

ЛАБОРАТОРНАЯ РАБОТА №7

Создание и вызов хранимых функций

по дисциплине «Базы данных»

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. Z9411 __________________ А.С. Чурилов

подпись, дата

Студенческий билет № 2019/3684

Санкт-Петербург

2022г.

Оглавление

1. Цель работы 3

2. Создание функции с операторами ветвления 3

3. Создание функции с циклическими конструкциями 5

4. Просмотр списка функций 8

Заключение 8

Список источников 10

  1. Цель работы

Цель лабораторной работы: изучить операции по созданию хранимых функций на сервере MySQL.

  1. Создание функции с операторами ветвления

Для выполнения работы воспользуемся базой данных 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 работает корректно.

  1. Создание функции с циклическими конструкциями

В среде разработки 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 работает корректно.

  1. Просмотр списка функций

Для ознакомления со списком хранимых функций воспользуемся командой show function status.

На рисунке 12 представлен перечень хранимых функций в среде разработки MySQL Workbench.

Рисунок 12 – Перечень хранимых функций

Заключение

В результате выполнения лабораторной работы были реализованы следующие задачи:

        • приобретены знания по применению переменных различного типа;

  • получены практические навыки работы с операторами ветвления и циклическими конструкциями на языке SQL;

  • изучены операции по созданию хранимых функций в среде разработки MySQL Workbench.

Список источников

  1. Кригель, А. SQL. Библия пользователя. [Текст] / А. Кригель. – Москва: Вильямс, 2010. – 752 с.

  2. Кузин, А.В. Разработка баз данных в системе Microsoft Access. Учебник. [Текст] / А.В. Кузин. – Санкт-Петербург: Форум, 2021. – 224 с.

  3. Кумскова, И.А. Базы данных. Учебник. [Текст] / И.А. Кумскова. – Москва: Кнорус, 2021. – 400 с.

  4. Свиридова, М.Ю. Система управления базами данных Access. [Текст] / М.Ю. Свиридова. – Москва: Academia, 2010. – 192 с.

  5. Гурвиц, Г.А. Microsoft Access 2021. Разработка приложений на реальном примере. [Текст] / Г.А. Гурвиц. – Москва: Лань, 2021. – 502 с.