Ответ
Хранимая процедура — это предварительно скомпилированный и сохраненный в базе данных именованный набор SQL-инструкций, который может выполняться как единая программа. Она может принимать входные параметры, выполнять сложные операции (чтение, модификация данных, вызов других процедур) и возвращать результаты.
Ключевые преимущества:
- Производительность: План выполнения компилируется и кэшируется один раз, что ускоряет последующие вызовы.
- Снижение сетевого трафика: Вместо отправки множества запросов клиент отправляет один вызов процедуры.
- Безопасность и абстракция: Можно предоставить пользователям доступ только к процедурам, скрывая прямую структуру таблиц и реализуя бизнес-правила на уровне БД.
- Централизация логики: Изменения вносятся в одном месте (БД), а не во всех клиентских приложениях.
Пример создания и вызова в MySQL:
-- Создание процедуры с входным параметром
DELIMITER //
CREATE PROCEDURE GetCustomerOrders(IN p_customer_id INT)
BEGIN
-- Логика внутри процедуры
SELECT order_id, order_date, total_amount
FROM orders
WHERE customer_id = p_customer_id
ORDER BY order_date DESC;
END //
DELIMITER ;
-- Вызов процедуры
CALL GetCustomerOrders(123);
Типичное использование:
- Сложные отчеты и агрегации данных.
- Пакетная обработка (ETL-операции).
- Реализация сложных бизнес-правил и проверок целостности (триггеры часто вызывают процедуры).
Недостаток: Перенос логики в БД может усложнить версионирование и тестирование, а также привязать систему к конкретной СУБД.