hostprofi.ru
Подобрать хостинг
Термин·буква Х

Хранимая процедура

краткое определение

Хранимая процедура (stored procedure) — именованный блок SQL-кода, сохранённый на сервере базы данных. Вызывается по имени из приложения или другой процедуры. Поддерживает параметры, условия, циклы и транзакции.

Хранимая процедура — объект базы данных, содержащий набор SQL-инструкций с поддержкой процедурной логики (переменные, условия IF/CASE, циклы LOOP/WHILE, обработка ошибок). Хранится и исполняется на сервере СУБД, что снижает сетевой трафик между приложением и БД.

Пример (MySQL)

DELIMITER //
CREATE PROCEDURE GetUserOrders(IN userId INT)
BEGIN
    SELECT o.*, p.name
    FROM orders o
    JOIN products p ON o.product_id = p.id
    WHERE o.user_id = userId
    ORDER BY o.created_at DESC;
END //
DELIMITER ;

-- Вызов
CALL GetUserOrders(42);

Преимущества и недостатки

Преимущества: сокращение сетевых round-trip; план выполнения кешируется СУБД; бизнес-логика сосредоточена в одном месте; упрощение прав (доступ к процедуре, но не к таблицам).

Недостатки: логика в СУБД затрудняет тестирование и версионирование; миграция на другую СУБД требует переписывания (диалекты SQL различаются); отладка сложнее, чем в коде приложения.

История

Первые хранимые процедуры появились в Sybase SQL Server в 1984 году. Microsoft SQL Server унаследовал концепцию в 1989 году (Transact-SQL). Oracle PL/SQL появился в 1991 году. MySQL добавил хранимые процедуры в версии 5.0 (2005). PostgreSQL поддерживает PL/pgSQL с версии 7.3 (2002) и добавил нативный синтаксис PROCEDURE в 11.0 (2018).

Связь с хостингом

Хранимые процедуры доступны в MySQL 5.0+ и PostgreSQL на любом тарифе с полноценным доступом к СУБД. На виртуальном хостинге — через phpMyAdmin или SSH. На VDS — полный контроль. ORM-фреймворки (Doctrine, Eloquent) обычно не поддерживают хранимые процедуры нативно — вызов происходит через raw SQL.

Хранимые процедуры в практике хостинга

Хранимая процедура (stored procedure) -- блок SQL-кода, хранящийся на сервере БД и вызываемый по имени. Преимущества: снижение сетевого трафика (один вызов вместо 10 запросов), повторное использование логики, контроль доступа (пользователь может вызвать процедуру без права на таблицы). Недостатки: логика размазана между приложением и БД, сложная отладка и версионирование, привязка к конкретной СУБД.

Примеры использования

Типичные сценарии для хранимых процедур: финансовые транзакции (перевод средств в одной атомарной операции), batch-обработка данных (ETL), периодические задачи через EVENT SCHEDULER в MySQL. Пример MySQL: CREATE PROCEDURE transfer_funds(IN from_acc INT, IN to_acc INT, IN amount DECIMAL) BEGIN ... END. MySQL, PostgreSQL (PL/pgSQL), Oracle (PL/SQL) -- все поддерживают хранимые процедуры. PostgreSQL PL/pgSQL более функциональный и поддерживает returns типы таблиц. База данных выполняет процедуры на стороне сервера, что экономит Round Trip Time. JDBC вызывает хранимые процедуры через CallableStatement.

История хранимых процедур

Хранимые процедуры появились в Oracle в 1980-х годах. Sybase и Microsoft добавили Transact-SQL (T-SQL) в 1989--1992 годах. MySQL добавил хранимые процедуры в версии 5.0 (2005). PostgreSQL поддерживает PL/pgSQL с версии 6.4 (1998). Современная тенденция: бизнес-логику переносят в приложение (ORM, microservices), оставляя в процедурах только критические транзакции. Экспорт БД включает дамп хранимых процедур через mysqldump --routines.

Другие термины