为了账号安全,请及时绑定邮箱和手机立即绑定

获取Oracle中所有表的列表?

/ 猿问

获取Oracle中所有表的列表?

潇潇雨雨 2019-07-12 15:51:02

获取Oracle中所有表的列表?

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



查看完整描述

3 回答

?
沧海一幻觉
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列-根据定义,所有者是你。

Oracle还有许多遗留数据字典视图-TABDICTTABS,和CAT例如.可以用来。一般来说,除非您绝对需要将脚本移植到Oracle 6,否则我不会建议使用这些遗留视图。Oracle已经很长时间没有更改这些视图了,因此它们在更新类型的对象方面经常会出现问题。例如,TABCAT视图都显示了有关用户回收站中的表的信息,而[DBA|ALL|USER]_TABLES视图全部过滤掉。CAT还显示了有关物化视图日志的信息。TABLE_TYPE这不太可能是你真正想要的。DICT合并表和同义词,而不告诉您是谁拥有该对象。


查看完整回答
反对 回复 2019-07-12
?
尚方宝剑之说

查询user_tablesdba_tables没起作用。
这一次:

select table_name from all_tables


查看完整回答
反对 回复 2019-07-12
?
慕村225694

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

例如:

SELECT table_name, column_nameFROM colsWHERE table_name LIKE 'EST%'AND column_name LIKE '%CALLREF%';

查找名称以EST开头的所有表和名称中任何地方都包含CALLREF的列。

例如,根据表和列的命名约定,这可以帮助确定要加入哪些列。


查看完整回答
反对 回复 2019-07-12

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信