Приклад (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)
- Бізнес-логіка розпорошена між кодом і БД
- Прив'язка до конкретної СУБД