Пример (MySQL)
DELIMITER $$
CREATE PROCEDURE GetUserOrders(IN userId INT)
BEGIN
SELECT o.id, o.total, o.status
FROM orders o
WHERE o.user_id = userId
ORDER BY o.created_at DESC;
END$$
DELIMITER ;
-- Вызов
CALL GetUserOrders(42);
Преимущества
- Логика на уровне БД — не зависит от языка приложения
- Меньше трафика между приложением и БД
- Права доступа на уровне процедуры, а не таблицы
Недостатки
- Сложно тестировать и версионировать (не в Git)
- Бизнес-логика разбросана между кодом и БД
- Привязка к конкретной СУБД