获取Oracle中所有表的列表?

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

 SELECT owner, table_name FROM dba_tables 

这是假设您有权访问DBA_TABLES数据字典视图。 如果您没有这些权限但需要它们,则可以请求DBA明确授予您对该表的权限,或者,DBA授予您“ SELECT ANY DICTIONARY特权或“ SELECT_CATALOG_ROLEangular色(其中任一个都允许您查询任何数据字典表)。 当然,你可能想要排除一些像SYSSYSTEM这样的具有大量你可能不关心的Oracle表的模式。

或者,如果您无权访问DBA_TABLES ,则可以通过ALL_TABLES视图查看您的帐户有权访问的所有表格:

 SELECT owner, table_name FROM all_tables 

尽pipe这可能是数据库中可用表的子集( ALL_TABLES显示了您的用户已被授权访问的所有表的信息)。

如果您只关心您拥有的表,而不是那些您有权访问的表,则可以使用USER_TABLES

 SELECT table_name FROM user_tables 

由于USER_TABLES只包含有关您拥有的表的信息,因此它没有OWNER列 – 根据定义,所有者就是您。

Oracle也有一些传统的数据字典视图 – 例如TABDICTTABS和CAT–可以使用。 一般来说,我不会build议使用这些遗留的视图,除非你绝对需要将你的脚本移植到Oracle 6上.Oracle并没有长时间改变这些视图,所以他们经常遇到新types的对象的问题。 例如, TABCAT视图都显示关于用户的回收站中的表的信息,而[DBA|ALL|USER]_TABLES视图都将这些信息过滤掉。 CAT还用“TABLE”的TABLE_TYPE显示关于物化视图日志的信息,这不太可能是您真正想要的。 DICT结合了表和同义词,并不告诉你谁拥有对象。

查询user_tablesdba_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%'; 

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

这可以帮助您计算想要join的列,例如,取决于您的表和列命名约定。

为了更好地查看与sqlplus

如果你使用的是sqlplus你可能需要首先设置一些参数,以便更好的查看,如果你的列正在被损坏(这些variables不应该在你退出sqlplus会话后继续存在):

 set colsep '|' set linesize 167 set pagesize 30 set pagesize 1000 

显示所有表格

然后你可以使用这样的东西来查看所有的表名:

 SELECT table_name, owner, tablespace_name FROM all_tables; 

显示您拥有的表格

正如@Justin Cave提到的,你可以使用它仅显示你拥有的表格:

 SELECT table_name FROM user_tables; 

不要忘记观点

请记住,一些“表”可能实际上是“意见”,所以你也可以尝试运行类似于:

 SELECT view_name FROM all_views; 

结果

这应该产生看起来相当可接受的东西,如:

结果

简单查询为当前用户select表格:

  SELECT table_name FROM user_tables; 
  select object_name from user_objects where object_type='TABLE'; 

– – – – – – – – 要么 – – – – – – – – –

  select * from tab; 

– – – – – – – – 要么 – – – – – – – – –

  select table_name from user_tables; 

尝试下面的数据字典视图。

 tabs dba_tables all_tables user_tables 

尝试从user_tables中select列出当前用户拥有的表。

有了这些,你可以select:

 SELECT DISTINCT OWNER, OBJECT_NAME FROM DBA_OBJECTS WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME'; SELECT DISTINCT OWNER, OBJECT_NAME FROM ALL_OBJECTS WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME'; 
 select * from dba_tables 

只有当您login的用户具有sysdba权限时,才会提供所有用户的所有表。

有3个datadictinary这个

DBA_TABLES描述数据库中的所有关系表。

 SELECT owner, table_name FROM dba_tables 

用户可访问的关系表的描述

 SELECT owner, table_name FROM all_tables 

USER_TABLES描述了当前用户拥有的关系表。 该视图不显示OWNER列。

 SELECT table_name FROM user_tables 

我没有find答案,指出使用

 DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES) 

所以决定添加我的版本。 这个视图实际上返回更多的DBA_TABLES,因为它也返回对象表( http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm )。

您可以使用Oracle数据字典获取有关oracle对象的信息。

你可以用不同的方式获得表格列表:

 select * from dba_tables 

或者例如:

 select * from dba_objects where object_type = 'TABLE' 

然后你可以使用表名获得表列:

 select * from dba_tab_columns 

然后你可以得到依赖列表(触发器,视图等):

 select * from dba_dependencies where referenced_type='TABLE' and referenced_name=:t_name 

那么你可以得到这个对象的文本源代码:

 select * from dba_source 

你可以使用USERALL视图来代替DBA

下面的查询只列出了所需的数据,而其他的答案给了我额外的数据,只是让我困惑。

 select table_name from user_tables; 

从dba_tables中select*; – 需要select目录angular色

从user_tables中select*;查看模式的表

从all_tables中select* – 你的文件中的表格和你拥有select资助的orher模式表格

Oracle数据库使用以下查询来显示所有表的名称

 SELECT所有者,table_name FROM dba_tables;

 SELECT所有者,table_name FROM all_tables;

 SELECT table_name FROM user_tables; 

vist more: http : //www.oracleinformation.com/2016/08/get-list-of-all-tables-in-oracle-sql.html

包括意见:

 SELECT owner, table_name as table_view FROM dba_tables UNION ALL SELECT owner, view_name as table_view FROM DBA_VIEWS