ОК, это будет заставлять меня звучать, как будто я придурок, но я действительно не хочу быть. Мой ответ на ваш вопрос - еще один вопрос.
«Какой бизнес вы бы определение политики развития, если вы не понять, как работает база данных?»
Вы говорите, что «просмотр просто должен был бы перестраиваться каждый раз в любом случае». Вы говорите, что любой код с представлением перекомпилируется каждый раз, когда он запрашивается? Потому что это абсолютно неверно (по крайней мере, на Oracle и SQL Server, то есть). Использование представлений - гораздо более гибкий способ получить эффективные запросы, чем хранимые процедуры, потому что оптимизатор может повторно оптимизировать ваше представление по тому, как вы его используете. И как только это было сделано, план запроса кэшируется, поэтому ему не нужно выполнять перекомпиляцию. Показательный пример: Вы создаете эту точку зрения:
Затем вы решите, что вы хотите получить список всех клиентов по имени Джон Смит:
SELECT c.CustomerID
FROM myOrders
WHERE c.LastName = 'Smith' AND c.FirstName = 'John';
Потому что это представление, то присоединиться к «Заказы» получает оптимизирован. Если бы вы попытались сделать это с помощью модуляции в хранимой процедуре, вы бы не смогли. Вам, вероятно, придется сделать еще один sproc только для этой цели. И довольно скоро вы попадаете в проблему, которая у вас есть, что составляет тонну едва поддерживаемых процедур.
Почему вы используете хранимые процедуры? В чем проблема, которую вы пытаетесь решить? Инкапсуляция? Я бы сказал, что для SELECTs UDF могут быть более полезными. Я также хотел бы утверждать, что запросы LINQ-типа на среднем уровне еще более гибкие. Вы пытаетесь оптимизировать производительность, используя хранимые процедуры? Если это так, знайте и понимайте, что каждый запрошенный вами конкретный запрос оптимизируется и кэшируется.Если вы используете SQL Server 2005+, вы можете даже заставить его параметризовать и кэшировать ваши планы запросов, даже если вы явно не укажете параметры.
Сохраненные процедуры имеют свое место, но их недостатки в ремонтопригодности, гибкости использования и да, даже в производительности, означают, что вы должны использовать их разумно, а не создавать общие политики для ваших разработчиков.
Сохраненные процедуры трудно поддерживать, поэтому в наши дни это обычная практика, чтобы избежать их как можно большего. – Ray
Сохраненные процедуры намного проще в обслуживании, чем различные клиенты, которые обращаются к базе данных с использованием разных технологий. Позже это неизбежно, как только ваша компания старше пяти лет. – Andomar
Oracle поддерживает пакеты, которые используются для логической группировки функций и процедур. Компромисс заключается в том, что им не хватает возможности предоставлять доступ на основе детализации (функции или процедуры). –