获取Oracle中所有表的列表?
如何查询Oracle数据库以显示其中所有表的名称?
SELECT owner, table_name
FROM dba_tables
这假设您可以访问DBA_TABLES
数据字典视图。 如果您没有这些权限但需要它们,则可以请求DBA明确授予您对该表的权限,或者,DBA授予您SELECT ANY DICTIONARY
权限或SELECT_CATALOG_ROLE
角色(其中任一权限都允许您查询任何数据字典表)。 当然,您可能希望排除某些模式,如SYS
和SYSTEM
,这些模式中包含大量您可能不关心的Oracle表。
或者,如果您无权访问DBA_TABLES
,则可以通过ALL_TABLES
视图查看您的帐户有权访问的所有表格:
SELECT owner, table_name
FROM all_tables
尽管这可能是数据库中可用表的子集( ALL_TABLES
显示了您的用户已被授予访问权限的所有表的信息)。
如果您只关心您拥有的表格,而不是那些您有权访问的表格,则可以使用USER_TABLES
:
SELECT table_name
FROM user_tables
由于USER_TABLES
只有关于您拥有的表的信息,因此它没有OWNER
列 - 根据定义,所有者就是您。
甲骨文公司还拥有一批传统数据字典views--的TAB
, DICT
, TABS
和CAT
的example--可能被使用。 一般情况下,我不会建议使用这些遗留视图,除非您绝对需要将脚本移植到Oracle 6中。Oracle并没有长时间更改这些视图,因此他们经常遇到新类型对象的问题。 例如, TAB
和CAT
视图都显示有关用户回收站中表的信息,而[DBA|ALL|USER]_TABLES
视图全部过滤掉这些表。 CAT
还显示有关物化视图日志的信息,其中TABLE_TYPE
为“TABLE”,这不太可能是您真正想要的。 DICT
结合了表和同义词,并不告诉你谁拥有这个对象。
查询user_tables
和dba_tables
不起作用。
这一个做到了:
select table_name from all_tables
更进一步,还有另一个视图叫做cols(all_tab_columns),它可以用来确定哪些表包含给定的列名。
例如:
SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';
查找名称以EST开头的所有表格和名称中任何地方包含CALLREF的列。
这可以帮助您计算想要加入的列,例如,取决于您的表和列命名约定。
链接地址: http://www.djcxy.com/p/16777.html