Полностью развернуть вид

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
369
3

Ответы 3

  1. Получите текст запроса вашего представления.

    SELECT text FROM dba_views
    WHERE owner = 'the-owner' AND view_name = 'the-view-name';
    
  2. Разобрать. Найдите имена представлений в тексте запроса.

  3. Получите текст запроса для каждого найденного имени представления. (см. пункт 1.)

  4. Замените каждое имя представления в запросе соответствующим текстом запроса.

  5. Делайте это рекурсивно, пока не перестанут быть найдены просмотры.

Легкий?

Обновлено: Приведенные выше инструкции не делают всего необходимого. Если подумать об этом еще немного, у него растут волосы, отрастают ноги и, возможно, еще одна рука. Поиск имен столбцов и имен столбцов, которые могут быть сложными функциями и подзапросами. Собираем все вместе с соединениями и предложениями. Полученный запрос может выглядеть очень некрасиво.

Где-то в Oracle может быть что-то, что действительно разворачивает представление. Я не знаю. Я рад, что не так часто использовал представления в Oracle.

Для этого можно использовать концепцию встроенные просмотры. Предположим, у вас есть 2 представления:

create or replace view london_dept as
select * from dept
where loc = 'LONDON';

и

create or replace view london_mgr as
select * from emp 
where job='MANAGER'
and deptno in (select deptno from london_dept);

В SQL второго представления ссылка на представление london_dept может быть заменена встроенным представлением с использованием SQL из определения представления london_dept следующим образом:

select * from emp 
where job='MANAGER'
and deptno in (select deptno from (select * from dept
where loc = 'LONDON'));

Конечно, теперь вы видите, что это слишком многословно, и его можно упростить до:

select * from emp 
where job='MANAGER'
and deptno in (select deptno from dept where loc = 'LONDON');

Наконец, несколько советов от Тома Кайта о преимуществах и недостатках создания просмотры просмотров

Вплоть до Oracle 12.1 правильный ответ - нет, нет простого пути. Теперь в версии 12.1 есть DBMS_UTILITY.EXPAND_SQL_TEXT: Expand SQL References to Views в Oracle Database 12c Release 1 (12.1) делает именно это. См. документация dbms_utility

Другие вопросы по теме