Мы приняли решение наложить несколько «параметризованных представлений» на некоторые обычные представления в Oracle, чтобы должным образом поощрять использование правильных предикатов, которые всегда используются в запросах.
Основная масса повторяющегося кода(таблицы, объединенные соответствующим образом) будут в представлении, так что у нас больше не будет много различных процедур и функций с их собственными копиями общих объединений и фильтров.
Затем мы наложим конвейерные табличные функции на эти представления, чтобыубедитесь, что вызывающие абоненты предоставляют необходимые фильтры, чтобы представления не назывались «на все время и пространство».Я рассмотрел альтернативы, использующие переменные sys_context и userenv и пакета, и, хотя они, по-видимому, являются тем, что пользователи Oracle называют параметризованными представлениями, они просто не способны использовать эти прокладки вокруг представления каждый раз, когда они используются, и их нельзя повторно использоватьself-join.
Я много об этом читал во многих местах, включая StackOverflow:
Табличные функции в ORACLE 11g?(параметризованные представления)
База данных: конвейерные функции
Разрешено ли использование SELECT внутри конвейерной табличной функции PL / SQL?
Это архитектурное решение, направленное на улучшение удобства сопровождения приложения, которое стало разросшимся с большим количеством повторных запросов.Представления могли бы помочь, но я беспокоюсь, что у нас нет способа принудительно использовать предикаты для вызывающих, чтобы они не делали глупостей.
Я достиг большого успеха, используя эту технику в SQLСервер со встроенными табличными функциями, и это действительно помогло сделать систему намного более согласованной и упростить отслеживание зависимостей и последствий предлагаемых изменений, поскольку было: а) меньше кода и б) больше повторного использования и меньше повторений.
Я немного волнуюсь по поводу этой последней ссылки, кажется, подразумевается, что у меня могут возникнуть проблемы с параллелизмом или синхронизацией, если я присоединюсь к одной из этих конвейерных табличных функций и использую ее для обновления другой таблицы.
Пожалуйста, поделитесь своим опытом с конвейерными табличными функциями и что мне нужно посмотреть?Также, если есть лучшая альтернатива, дайте мне знать в своем ответе тоже?