MySQL procedures
Збережені процедури
За допомогою збережених процедур (англ. stored procedures) можна виконувати складні операції прямо на сервері бази даних.
Зазвичай при роботі з БД для роботи з даними використовуються SQL-запити з операторами SELECT, INSERT, UPDATE та DELETE. Якщо з базою даних працює декілька додатків, то такі SQL-запити можуть дублюватися в окремих додатках.
Замість виконання SQL-запитів з клієнтського застосунку, збережені процедури запускаються і виконуються на самому сервері бази даних. Кожна така процедура має власне ім’я та одну або декілька інструкцій, що послідовно виконуються базою даних при їхньому виклику.
Створення збереженої процедури
Розглянемо приклад створення збереженої процедури:
DELIMITER //таDELIMITER ;використовується для зміни роздільника за замовчуванням;CREATE PROCEDURE get_all_employees()створює нову процедуру з назвоюget_all_employees();SELECT * FROM Employees;вказує інструкцію, яка виконається базою даних;BEGINтаENDобмежують тіло процедури.
Викликати збережену процедуру можна за допомогою наступного оператора:
Створення збереженої процедури з вхідним параметром
Ми також можемо передати параметр до збережених процедур, і таким чином звузити коло пошуку внаслідок якогось критерію. Розглянемо на прикладі:
DELIMITER //
CREATE PROCEDURE get_most_of_employees(
IN NameFilter varchar(10)
)
BEGIN
SELECT * FROM Employees WHERE Name=NameFilter;
END //
DELIMITER ;
Дужки після назви процедури тепер містять параметр NameFilter з типом varchar(10), яке буде використовуватись в тілі процедури для фільтрації запитів. Ключове слово IN повідомляє базі даних, що параметр буде передано користувачем, який викликає процедуру.
Збережену процедуру з параметром можна викликати ось так:
Видалення збережених процедур
Щоб видалити збережену процедуру, потрібно використати команду DROP PROCEDURE:
Переваги та недоліки
До переваг можна віднести наступне:
- збережені процедури зменшують кількість даних, які потрібно передавати між сервером та клієнтом, особливо при великих операціях;
- сервер бази даних набагато ефективніше виконуватиме операції пошуку чи фільтрування даних ніж клієнт;
- замість копіювання одного й того ж коду у різних програмах чи частинах однієї програми, можна просто викликати одну процедуру.
Але є і певні недоліки, оскільки збережені процедури:
- важко підтримуються;
- практично неможливі для дебагінгу;
- складно тестуються;
- складні до налагодження таким чином, щоб не вплинути на роботу цілої системи.
💡Щоб внести зміни в роботу збереженої процедури, часто потрібно повністю зупинити роботу системи та ізолювати її від користувачів. Лише тоді в процесі оновлення процедур користувачі не стикнуться з некоректною поведінкою системи.
Збережені процедури часто використовувалися у минулому, але через важкість підтримки, тестування та розгортання, більшість відмовляються від них. Проте досі існує багато систем, які покладаються на роботу збережених процедур, тому корисно знати як з ними працювати.