Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Готовые отчеты / Базы данных. Лабораторная работа 3

.pdf
Скачиваний:
56
Добавлен:
29.01.2021
Размер:
266.6 Кб
Скачать

Федеральное агентство связи ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА» (СПбГУТ)

Факультет инфокоммуникационных сетей и систем Кафедра фотоники и линий связи

ЛАБОРАТОРНАЯ РАБОТА №3 по дисциплине «Базы данных»

на тему «Хранимые процедуры в MySQL»

Выполнили: студенты 3-го курса дневного отделения группы ИКПИ-85 Ежуров Антон Павлович

Коваленко Леонид Александрович Преподаватель:

ассистент кафедры ПИиВТ Овчинников Антон Олегович

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

2020

Цель работы Получить практические навыки создания хранимых процедур и работы

с переменными на языке SQL.

Ход работы

Создадим базу данных university в программе-дизайнере MySQL Workbench. В этой базе данных создадим таблицу departments с полями:

1.id типа INT, первичный ключ (PK), счетчик (AI);

2.name типа VARCHAR, ненулевое (NN).

Заполним таблицу departments произвольными двумя записями (для поля name будем использовать название групп своего потока) (табл. 1). Таблица 1 — Таблица departments базы данных university

id

name

 

 

1

ИКПИ-81

 

 

2

ИКПИ-85

В базе данных university создадим таблицу users с полями: 1. id типа INT, первичный ключ (PK), счетчик (AI);

2. name типа VARCHAR, ненулевое (NN);

3. department_id типа INT.

Заполним таблицу users произвольными записями — пять строк, при этом: две записи из таблицы users свяжем с первой группой из таблицы departments, а остальные записи свяжем со второй группой через поле id

таблицы departments и department_id таблицы users (табл. 2).

Таблица 2 — Таблица users базы данных university

id

name

department_id

1

Алексей

1

 

 

 

2

Михаил

1

 

 

 

3

Елена

2

 

 

 

4

Иван

2

 

 

 

5

Владимир

2

Создадим хранимую процедуру с именем getUserInfo (раздел Routines в MySQL Workbech).

Заполним тело процедуры согласно образцу (табл. 3).

2

Таблица 3 — Процедура getUserInfo

CREATE PROCEDURE `university`.`getUserInfo` (IN param1 VARCHAR(45), OUT param2 INT)

BEGIN

DECLARE UserName VARCHAR(45); SET UserName = 'Иван';

IF param1 IS NOT NULL THEN SET UserName = param1;

END IF;

SELECT departments.name AS departments INTO @department FROM users LEFT JOIN departments ON users.department_id = departments.id WHERE users.name = UserName;

SELECT COUNT(*) INTO param2 FROM users;

END

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

Запустим генерацию базы данных на сервере MySQL (Пункт меню: Database → Forward Engineer). В опциях поставим галки напротив пунктов

Generate INSERT statements for tables и DROP objects before each CREATE object.

Подключимся к базе данных MySQL (команда mysql -u root -p) и активизируем базу данных university (команда use university).

Выполним SQL-команды (рис. 1):

SELECT * FROM users; SELECT * FROM departments;

Рисунок 1 — Результат добавления 3

Запустим созданную хранимую процедуру и посмотрим результат (рис.

2):

CALL getUserInfo(NULL, @total); SELECT @department;

SELECT @total;

Рисунок 2 — Результат работы процедуры с пустым значением первого параметра

Запустим созданную хранимую процедуру, изменив первый параметр с NULL на имя пользователя 'Михаил' из таблицы users (рис. 3):

CALL getUserInfo('Михаил', @total); SELECT @department;

SELECT @total;

Рисунок 3 — Результат работы процедуры с непустым значением первого параметра

4

CALL,

Выводы Хранимая процедура представляет собой набор инструкций, которые

выполняются как единое целое. Тем самым хранимые процедуры позволяют упростить комплексные операции и вынести их в единый объект.

Достоинства хранимой процедуры:

упрощает управление кодом;

позволяет ограничить доступ к данным в таблицах и уменьшить вероятность нежелательных действий в отношении этих данных;

обычно выполняются быстрее, чем обычные SQL-инструкции, так как код процедур компилируется один раз при первом ее запуске, а затем сохраняется в скомпилированной форме.

Для создания хранимой процедуры применяется команда CREATE

PROCEDURE.

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

Переменные бывают пользовательскими (такая переменная создается в момент присвоения ей значения и хранится до завершения соединения с сервером; пишется со знаком @, например, @total), переменными хранимого кода (имеют ограниченную область видимости; пишется без знака @) и системными.

Пользовательская переменная:

SET @total = 5;

Переменная хранимого кода:

DECLARE total INT DEFAULT 5;

или

DECLARE total INT; SET total = 5;

Системная переменная может быть глобальной или переменной сеанса. Глобальная системная переменная:

SET GLOBAL total = 5;

или

SET @@global.total = 5;

5

Переменная сеанса:

SET total = 5;

или

SET SESSION total = 5;

или

SET @@total = 5;

или

SET @@local.total = 5;

6