Что такое хранимая процедура (Stored Procedure) в SQL?

«Что такое хранимая процедура (Stored Procedure) в SQL?» — вопрос из категории Базы данных и SQL, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Хранимая процедура — это предварительно скомпилированный и сохраненный в базе данных именованный набор 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-операции).
  • Реализация сложных бизнес-правил и проверок целостности (триггеры часто вызывают процедуры).

Недостаток: Перенос логики в БД может усложнить версионирование и тестирование, а также привязать систему к конкретной СУБД.