Полностью развернуть вид - PullRequest
4 голосов
/ 26 сентября 2008

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

Ответы [ 3 ]

2 голосов
/ 26 сентября 2008

Для этого можно использовать концепцию встроенных представлений . Предположим, у вас есть 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');

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

2 голосов
/ 26 сентября 2008
  1. Получить текст запроса вашего представления.

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

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

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

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

Easy

РЕДАКТИРОВАТЬ: Приведенные выше инструкции не делают все необходимое. Думая об этом немного больше, он становится волосатым, отрастает ноги и, возможно, другая рука. Поиск имен столбцов и имен столбцов, которые могут быть сложными функциями и подзапросами. Объединяя все это вместе с соединениями и предложениями. Результирующий запрос может выглядеть очень некрасиво.

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

0 голосов
/ 24 января 2017

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

...