如何找到Oracle视图的基础列和表名?
这听起来应该很简单,但事实并非如此!我找不到提供Oracle视图列的基础列和表名的Oracle(元数据)视图。我发现的唯一方法是解析视图源SQL(这远远不是一门精确的科学)如何找到Oracle视图的基础列和表名?,oracle,view,metadata,Oracle,View,Metadata,这听起来应该很简单,但事实并非如此!我找不到提供Oracle视图列的基础列和表名的Oracle(元数据)视图。我发现的唯一方法是解析视图源SQL(这远远不是一门精确的科学) 只是解释我想要什么,考虑下面的示例视图,我在史葛模式中创建: 创建或替换视图EMP\u DEP ( 员工姓名, 部门名称 ) 作为 挑选 艾娜, DNAME 从…起 emp a, b系 哪里 a、 deptno=b.deptno / 现在给定视图和列名EMP_DEP.DEPARTMENT_name,我想获得视图使用的基础表
只是解释我想要什么,考虑下面的示例视图,我在史葛模式中创建:
创建或替换视图EMP\u DEP
(
员工姓名,
部门名称
)
作为
挑选
艾娜,
DNAME
从…起
emp a,
b系
哪里
a、 deptno=b.deptno
/
现在给定视图和列名EMP_DEP.DEPARTMENT_name,我想获得视图使用的基础表和列名DEPT.DNAME。有人知道不需要解析视图的SQL就可以获取此信息的方法吗?没有方法,因为每个视图列的定义都是一个表达式,而不仅仅是一个表列。例如,视图的SQL可以是:
SELECT
UPPER(ENAME) || 'xxx',
myfunction(DNAME)
FROM
emp a,
dept b
WHERE
a.deptno= b.deptno
或许
SELECT ename || 'xxx', dname
FROM (
SELECT
UPPER(ENAME) AS ename,
myfunction(DNAME) AS dname
FROM
emp a,
dept b
WHERE
a.deptno= b.deptno
)
本例中的“基础列”您希望看到什么?定义视图的sql可以在所有视图中找到
set long 9999
select TEXT from all_views where VIEW_NAME='MYVIEW';
这是获取底层表和列的唯一方法。在11g中引入了Oracle。因此,数据库知道视图或包体所依赖的表列。然而,他们似乎没有在视图中公开这些数据。但是可能有x$表包含此信息。可能对识别依赖项有一些帮助
DBA_DEPENDENCIES视图将为您提供视图所基于的表的列表:
SELECT *
FROM DBA_DEPENDENCIES
WHERE OWNER = <Schema>
AND NAME = <View_Name>
AND TYPE = 'VIEW'
选择*
来自DBA_依赖项
其中所有者=
名称=
和类型='VIEW'
可以使用以下查询选择用于创建视图的表:
select
name ,
type ,
referenced_name ,
referenced_type
from
user_dependencies
where
name = 'VIEW_NAME' and
type = 'VIEW' and
referenced_type = 'TABLE';
如果视图列的列名与表列的列名相同,请尝试以下查询:
select
distinct table_name, column_name
from
all_tab_columns
where table_name in (select
referenced_name
from
user_dependencies
where
name = 'VIEW_NAME' and
type = 'VIEW' and
referenced_type = 'TABLE')
and column_name in (select
column_name
from
all_tab_columns
where
table_name = 'VIEW_NAME');
由于请求者正在查找其表的任何实例,而不是针对特定视图,因此我建议:
SELECT *
FROM DBA_DEPENDENCIES
WHERE TYPE = 'VIEW'
AND REFERENCED_TYPE = 'TABLE'
AND REFERENCED_NAME = '<TABLE_NAME>'
选择*
来自DBA_依赖项
其中TYPE='VIEW'
和引用的_类型='TABLE'
和引用的名称=“”
如果您想要查看表和列的依赖关系,则此功能非常有效:
WITH view_dependencies (view_name, table_name) AS (
SELECT CONNECT_BY_ROOT d.name AS view_name, d.referenced_name AS table_name
FROM all_dependencies d
WHERE d.referenced_type IN ('TABLE', 'VIEW')
START WITH d.name = UPPER('jtf_rs_resource_extns_vl') AND d.type = 'VIEW'
CONNECT BY PRIOR d.referenced_name = d.name AND PRIOR d.referenced_type = d.type
)
SELECT deps.view_name, deps.table_name, tbl.table_id, cols.column_id,
cols.column_name
FROM view_dependencies deps
LEFT JOIN FND_TABLES tbl ON tbl.table_name = deps.table_name
LEFT JOIN FND_COLUMNS cols ON tbl.table_id = cols.table_id
ORDER BY deps.view_name, deps.table_name, cols.column_sequence;
输出
VIEW_NAME TABLE_NAME TABLE_ID COLUMN_ID COLUMN_NAME
=======================================================================================
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563724 RESOURCE_ID
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563712 CREATED_BY
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563713 CREATION_DATE
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563718 LAST_UPDATED_BY
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563719 LAST_UPDATE_DATE
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563720 LAST_UPDATE_LOGIN
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563704 CATEGORY
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563725 RESOURCE_NUMBER
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563729 SOURCE_ID
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563686 ADDRESS_ID
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563709 CONTACT_ID
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563721 MANAGING_EMPLOYEE_ID
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563730 START_DATE_ACTIVE
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563714 END_DATE_ACTIVE
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563732 TIME_ZONE
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563711 COST_PER_HR
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563723 PRIMARY_LANGUAGE
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563726 SECONDARY_LANGUAGE
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563717 IES_AGENT_LOGIN
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563728 SERVER_GROUP_ID
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563687 ASSIGNED_TO_GROUP_ID
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563710 COST_CENTER
没错(我也知道这一点)。在这种情况下,它应该什么也不返回,因为它是一个表达式。如果一些依赖项查询将返回emp.ename和dept.dname,那就更好了,这样可以更容易地确定对基础表/列的更改将影响视图/过程/等的位置。。。。但是TOAD在“used by”选项卡上提供了很多这样的信息,所以至少手动检查是很容易的。2.5年后,这又有了帮助。这是一篇非常古老的文章,但这节省了我在视图中挖掘权限的数小时!谢谢你,先生!
VIEW_NAME TABLE_NAME TABLE_ID COLUMN_ID COLUMN_NAME
=======================================================================================
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563724 RESOURCE_ID
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563712 CREATED_BY
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563713 CREATION_DATE
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563718 LAST_UPDATED_BY
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563719 LAST_UPDATE_DATE
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563720 LAST_UPDATE_LOGIN
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563704 CATEGORY
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563725 RESOURCE_NUMBER
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563729 SOURCE_ID
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563686 ADDRESS_ID
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563709 CONTACT_ID
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563721 MANAGING_EMPLOYEE_ID
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563730 START_DATE_ACTIVE
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563714 END_DATE_ACTIVE
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563732 TIME_ZONE
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563711 COST_PER_HR
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563723 PRIMARY_LANGUAGE
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563726 SECONDARY_LANGUAGE
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563717 IES_AGENT_LOGIN
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563728 SERVER_GROUP_ID
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563687 ASSIGNED_TO_GROUP_ID
JTF_RS_RESOURCE_EXTNS_VL JTF_RS_RESOURCE_EXTNS 80056 563710 COST_CENTER