获取Oracle中所有表的列表?

半腔热情 提交于 2019-12-12 20:59:45

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

如何查询Oracle数据库以显示其中所有表的名称?


#1楼

尝试以下数据字典视图。

tabs
dba_tables
all_tables
user_tables

#2楼

select * from dba_tables

仅当您登录的用户具有sysdba权限时,才会提供所有用户的所有表。


#3楼

更进一步,还有另一个名为cols(all_tab_columns)的视图,可用于确定哪些表包含给定的列名。

例如:

SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';

查找名称以EST开头的所有表和名称中包含CALLREF的列。

在计算要加入的列时,这可能会有所帮助,例如,取决于您的表和列命名约定。


#4楼

简单查询为当前用户选择表:

  SELECT table_name FROM user_tables;

#5楼

SELECT owner, table_name
  FROM dba_tables

这假设您可以访问DBA_TABLES数据字典视图。 如果您没有这些权限但需要它们,则可以请求DBA明确授予您对该表的权限,或者DBA授予您SELECT ANY DICTIONARY权限或SELECT_CATALOG_ROLE角色(其中任何一个都允许您查询任何数据字典表)。 当然,您可能希望排除某些模式,如SYSSYSTEM ,这些模式具有您可能不关心的大量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--的TABDICTTABSCAT的example--可能被使用。 一般情况下,我不建议使用这些遗留视图,除非您绝对需要将脚本反向移植到Oracle 6. Oracle在很长一段时间内没有更改这些视图,因此它们经常遇到新类型对象的问题。 例如, TABCAT视图都显示有关用户回收站中的表的信息,而[DBA|ALL|USER]_TABLES视图全部过滤掉这些表。 CAT还显示有关TABLE_TYPE为“TABLE”的物化视图日志的信息,这不太可能是您真正想要的。 DICT结合了表和同义词,并没有告诉你谁拥有该对象。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!