Преимущества : Предоставляет «открытый интерфейс» для базы данных (еще один уровень абстракции).
Также группирует все запросы в одном месте, что позволяет администраторам баз данных видеть, как запрашивается база данных, и соответствующим образом оптимизировать ее.
Недостатки : Может быть, не лучшее место, чтобы поставить сложную логику. Однако, следуя идее, что сложная логика принадлежит коду приложения, а не к хранимым процедурам, хранимые процедуры становятся просто операциями CRUD (в каждой таблице есть процедуры «Создать», «Чтение», «Обновить» и «Удалить»). В этом случае хранимые процедуры не добавляют никакой ценности приложению, они только усложняют обслуживание и становятся ненужными.
Все запросы сгруппированы, поэтому сложнее увидеть контекст приложения, в котором они используются. Анализ влияния изменений длится дольше, а выполнение изменений также дольше.
Поэтому : использовать хранимые процедуры для инкапсуляции сложных запросов (сложные объединения, сложные выражения where, ...). Но не используйте хранимые процедуры для сложных приложений / доменов / бизнес-логики, и также не используйте хранимые процедуры для CRUD. Таким образом, хранимые процедуры должны использоваться в меньшинстве случаев, а не быть стандартным инструментом для всех запросов в приложении.
Группировать код (включая запросы) для достижения «функциональной сплоченности» вместо группировки по инструменту / технологии. Чтобы позволить администратору базы данных оптимизировать базу данных в зависимости от того, как она запрашивается, используйте профилировщик.