Oracle 完全展开视图
在Oracle中,是否有一种简单的方法可以完全展开视图?如果我有一个视图是由多个视图上的选择组成的,有没有什么方法可以将其展开,直接在实际表上选择Oracle 完全展开视图,oracle,views,Oracle,Views,在Oracle中,是否有一种简单的方法可以完全展开视图?如果我有一个视图是由多个视图上的选择组成的,有没有什么方法可以将其展开,直接在实际表上选择 获取视图的查询文本 SELECT text FROM dba_views WHERE owner = 'the-owner' AND view_name = 'the-view-name'; 解析。在查询文本中搜索视图名称 获取找到的每个视图名称的查询文本。(见第1项。) 用相关查询文本替换查询中的每个视图名称 递归地执行此操作,直到找不到更多视
SELECT text FROM dba_views
WHERE owner = 'the-owner' AND view_name = 'the-view-name';
create or replace view london_dept as
select * from dept
where loc = 'LONDON';
及
在第二个视图的SQL中,可以使用london_dept视图定义中的SQL将对view 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');
最后,Tom Kyte就在Oracle 12.1之前创建的优缺点提出了一些建议。正确答案是否定的,没有简单的方法。现在,在12.1中有DBMS_实用程序。EXPAND_SQL_TEXT:EXPAND SQL References to Views in Oracle Database 12c Release 1(12.1)正是这样做的。见
select * from emp
where job='MANAGER'
and deptno in (select deptno from dept where loc = 'LONDON');