提问



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

最佳参考


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还有许多遗留数据字典视图 - 例如TABDICTTABSCAT - 可以使用。通常,我不建议使用这些遗留视图,除非您绝对需要将脚本反向移植到Oracle 6. Oracle长时间没有更改这些视图,因此它们经常遇到新类型对象的问题。例如,TABCAT视图都显示有关用户回收站中的表的信息,而[DBA|ALL|USER]_TABLES视图全部过滤掉这些表。CAT也显示关于具有TABLE_TYPETABLE的物化视图日志的信息,这不太可能是你真正想要的。DICT结合了表和同义词,并没有告诉你谁拥有该对象。

其它参考1


查询user_tablesdba_tables不起作用。

这个做了:


select table_name from all_tables  

其它参考2


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


例如:


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


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


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

其它参考3


使用sqlplus

进行更好的观看

如果您正在使用sqlplus,您可能需要首先设置一些参数以便在您的列被破坏时更好地查看(退出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;


结果



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




其它参考4


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


  SELECT table_name FROM user_tables;

其它参考5


尝试以下数据字典视图。


tabs
dba_tables
all_tables
user_tables

其它参考6


    select object_name from user_objects where object_type='TABLE';


- - - - - - - - 要么 - - - - - - - - -


    select * from tab;


- - - - - - - - 要么 - - - - - - - - -


    select table_name from user_tables;

其它参考7


尝试从user_tables中选择,列出当前用户拥有的表。[62]

其它参考8


有了这些,你可以选择:


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';

其它参考9


为此存在3个数据


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

其它参考10


select * from dba_tables


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

其它参考11


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


SELECT owner, table_name FROM dba_tables;

SELECT owner, table_name FROM all_tables;

SELECT table_name FROM user_tables;


更多信息:http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html [63]

其它参考12


我没有找到可以指出使用的答案


DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)


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

其它参考13


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


您可以通过不同方式获取表的列表:


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

其它参考14


包括观点:


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

其它参考15


我们可以从以下查询获取所有表格,包括列详细信息:


SELECT * FROM user_tab_columns;

其它参考16


下面是一个注释的SQL查询片段,描述了您可以使用的选项:


-- need to have select catalog role
SELECT * FROM dba_tables;

-- to see tables of your schema
SELECT * FROM user_tables;

-- tables inside your schema and tables of other schema which you possess select grants on
SELECT * FROM all_tables;

其它参考17


以下查询仅列出了所需的数据,而其他答案给了我额外的数据,这些数据只让我感到困惑。


select table_name from user_tables;

其它参考18


我希望获得属于按列id顺序排序的模式表的所有列名称的列表。


这是我正在使用的查询: -


SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
ORDER BY COLUMN_ID ASC;