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

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

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

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

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

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

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

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

ОЦЕНКА

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

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

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

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

Создание и вызов хранимых процедур

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

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

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

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

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

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

2022г.

Оглавление

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

2. Создание процедур с глобальными переменными и операторами ветвления 3

3. Создание процедуры с переменными различного типа и циклическими конструкциями 6

4. Просмотр списка процедур 7

Заключение 8

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

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

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

  1. Создание процедур с глобальными переменными и операторами ветвления

Для выполнения работы воспользуемся базой данных DBtheatre, характеризующей информационную систему «Театр». Соответствующая даталогическая модель представлена на рисунке 1.

Рисунок 1 – Даталогическая модель информационной системы «Театра»

Начнём работу в среде разработки MySQL Workbench. Создадим хранимую процедуру, где будут использоваться глобальные переменные и операторы ветвления.

Реализуем процедуру под названием «proc1», которой на вход будет передаваться целочисленное значение x. После определения алгоритмом численного диапазона, куда попадает величина переменной, по заданным формулам будут находиться показатели трёх параметров (a, b, c). В таблице 1 приведены условия вычисления переменных a, b, c и выражения, необходимые для этого.

Таблица 1 – Условия вычисления выходных параметров процедуры proc1

Входной параметр x

Переменная a

Переменная b

Переменная c

< 0

|x| + 10

+ 10

+ 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 работает корректно.

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

Создадим хранимую процедуру, где будут использоваться переменные различного типа и циклические структуры.

Реализуем процедуру под названием «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 успешно справляется с поставленным заданием.

  1. Просмотр списка процедур

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

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

Рисунок 9 – Перечень хранимых процедур

Заключение

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

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

  • получены практические навыки работы с операторами ветвления и циклическими конструкциями на языке 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 с.