这听起来应该很简单但不是这样!我找不到Oracle(元数据)视图,它为Oracle视图列提供了基础列和表名 . 我发现这样做的唯一方法是解析视图源SQL(这远非精确科学) .
只是为了解释我想要的,请考虑我在SCOTT模式中创建的以下示例视图:
CREATE OR REPLACE VIEW EMP_DEP
(
EMPLOYEE_NAME,
DEPARTMENT_NAME
)
AS
SELECT
ENAME,
DNAME
FROM
emp a,
dept b
WHERE
a.deptno= b.deptno
/
现在给出了视图和列名EMP_DEP.DEPARTMENT_NAME,我想获得视图使用的底层表和列名,即DEPT.DNAME . 有没有人知道获取此信息的方法,而不涉及解析视图的SQL?
6 回答
可以使用查询选择用于创建视图的表:
如果视图列具有相同的列列名称,请尝试以下查询:
由于请求者正在寻找他的表的任何实例,而不是特定视图,我建议:
没有办法,因为每个视图列的定义是 expression ,而不是(通常)只是一个表列 . 例如,您的视图的SQL可能是:
也许
对于此示例中的“基础列”,您期望看到什么?
可以在all_views中找到定义视图的sql
这是获取基础表和列的唯一方法 .
在11g Oracle中引入了finer grained dependency tracking . 因此数据库知道视图或包体所依赖的表列 . 但是,他们似乎没有在视图中公开这些数据 . 但是信息可能有x $表 .
linked procedures可能对识别依赖关系有所帮助
DBA_DEPENDENCIES视图将为您提供View所基于的表的列表: