




Получите текст запроса вашего представления.
SELECT text FROM dba_views
WHERE owner = 'the-owner' AND view_name = 'the-view-name';
Разобрать. Найдите имена представлений в тексте запроса.
Получите текст запроса для каждого найденного имени представления. (см. пункт 1.)
Замените каждое имя представления в запросе соответствующим текстом запроса.
Делайте это рекурсивно, пока не перестанут быть найдены просмотры.
Легкий?
Обновлено: Приведенные выше инструкции не делают всего необходимого. Если подумать об этом еще немного, у него растут волосы, отрастают ноги и, возможно, еще одна рука. Поиск имен столбцов и имен столбцов, которые могут быть сложными функциями и подзапросами. Собираем все вместе с соединениями и предложениями. Полученный запрос может выглядеть очень некрасиво.
Где-то в 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