Предостережения для использования кондиционированных функций таблицы в Oracle для реализации параметризованных функций просмотра?

StackOverflow https://stackoverflow.com/questions/5980889

Вопрос

Мы приняли решение о слое некоторых «параметризованных представлений» в течение некоторых регулярных представлений в Oracle, чтобы правильно поощрять правильные, где предикаты всегда будут использоваться в запросах.

Большая часть повторяющегося кода (таблицы, присоединенная соответствующим образом), так что мы больше не будем иметь много разных процедур и функций со своими собственными копиями общих объединений и фильтров.

Затем мы будем сложными функциями стола для трубопроводов над этими представлениями, чтобы позвонить, чтобы абоненты предоставляли необходимые фильтры, чтобы представления не были вызваны «для всех времен и пробелов». Я посмотрел на альтернативы, используя Sys_context и Userenv и переменные пакетов, и хотя они, кажется, какие пользователи Oracle вызывают параметризованные представления, они просто не являются жизнеспособными, чтобы эти прокладывались по мнению, каждый раз, когда он используется, и они не используются в Самостояние.

Я много читал об этом в различных местах, включая StackoverFlow:

Таблицевые функции в Oracle 11G? (Параметризованные виды)

База данных: конвейерные функции

использует выбор внутри Допустимая функция PLA / SQL таблицы PL / SQL?

Это архитектурное решение попытаться улучшить ремонтопригодность приложения, которое стало растяжением с большим количеством повторяющихся запросов. Взгляды будут иметь возможность помочь, но я обеспокоен тем, что у нас нет возможности принуждать предикатов на абонентах, чтобы остановить их от глупых вещей.

У меня было много успеха, используя эту технику в SQL Server с встроенным табличным функциям, и она действительно помогла сделать систему намного более последовательной и легче отслеживать зависимости и эффекты предложенных изменений, поскольку был ) Меньше кода и б) более повторное использование и меньше повторения.

Я немного беспокоюсь об этой последней ссылке, похоже, подразумевает, что у меня может быть во время параллелизма или проблемы с синхронизацией, если я должен был присоединиться к одной из этих функций по трудовой таблице и использовать его для обновления другой таблицы.

Пожалуйста, поделитесь своим опытом с кондиционированными функциями таблицы и то, что мне нужно смотреть? Также, если есть лучшая альтернатива, дайте мне знать в вашем ответе?

Это было полезно?

Решение

Да, поведение точка во временном запросе таблицы внутри трубопроводов отличается от запроса таблицы непосредственно или через представление, поэтому необходимо учитывать. Это сказано, что это обычно не проблема, если трубопроволочная функция запрашивает нечасто обновленную таблицу. Я не могу думать о каких-либо проблемах параллелизма или времени.

Моя главная проблема с предоставлением трубопроводов для разработчиков для использования (в отличие от использования видов), состоит в том, что они (например, некоторые виды) могут быть легко использованы. Разработчики могут присоединиться к результатам одной трубопроводной функции к другой, что приведет к очень неэффективным запросам, которые не могут воспользоваться такими вещами, как индексы, толкаемые предикаты и ограничения таблиц.

Если ремонтопригодность - ваша главная проблема, то я бы предпочел представления - они могут помочь уменьшить дублированный код, определяя общие преобразования в одном месте, и, возможно, общие соединения; Однако даже они слишком легко неправильно используются (например, присоединение к мнению, даже если он присоединяется к другой таблице, который не требуется исходным запросом).

Производительность и эффективность, вероятно, будут осторожны. Поместите строгий режим проверки на месте для всех SQL в приложении, чтобы искать плохо написанные или непоследовательные запросы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top