Get list of all tables in Oracle?
如何查询Oracle数据库以显示其中所有表的名称?
1 2 | SELECT owner, TABLE_NAME FROM dba_tables |
这是假设您可以访问
或者,如果您没有访问
1 2 | SELECT owner, TABLE_NAME FROM all_tables |
号
不过,这可能是数据库中可用表的一个子集(
如果您只关心您拥有的表,而不是您可以访问的表,那么可以使用
1 2 | SELECT TABLE_NAME FROM user_tables |
由于
Oracle还有许多可以使用的遗留数据字典视图——例如,
查询
1 | SELECT TABLE_NAME FROM all_tables |
。
更进一步,还有一个名为cols(all_tab_columns)的视图,可用于确定哪些表包含给定的列名称。
例如:
1 2 3 4 | SELECT TABLE_NAME, column_name FROM cols WHERE TABLE_NAME LIKE 'EST%' AND column_name LIKE '%CALLREF%'; |
查找名称以est开头的所有表以及名称中任何位置包含callRef的列。
例如,根据表和列的命名约定,这有助于确定要联接的列。
以便更好地使用
如果您使用的是
1 2 3 4 | SET colsep '|' SET linesize 167 SET pagesize 30 SET pagesize 1000 |
显示所有表
然后,可以使用类似的方法查看所有表名:
1 | SELECT TABLE_NAME, owner, tablespace_name FROM all_tables; |
。显示您自己的表
正如@justin cave所提到的,您可以使用它只显示您拥有的表:
1 | SELECT TABLE_NAME FROM user_tables; |
号不要忘记视图
请记住,有些"表"实际上可能是"视图",因此您也可以尝试运行以下内容:
1 | SELECT view_name FROM all_views; |
号结果
这将产生一些看起来相当可接受的东西,比如:
。
为当前用户选择表的简单查询:
1 | SELECT TABLE_NAME FROM user_tables; |
1 | SELECT object_name FROM user_objects WHERE object_type='TABLE'; |
号
------------或-----------
1 | SELECT * FROM tab; |
号
------------或-----------
1 | SELECT TABLE_NAME FROM user_tables; |
号
尝试以下数据字典视图。
1 2 3 4 | tabs dba_tables all_tables user_tables |
。
存在3个数据字典
dba_表描述数据库中的所有关系表。
1 2 | SELECT owner, TABLE_NAME FROM dba_tables |
用户可访问的关系表的描述
1 2 | SELECT owner, TABLE_NAME FROM all_tables |
。
用户表描述当前用户拥有的关系表。此视图不显示所有者列。
1 2 | SELECT TABLE_NAME FROM user_tables |
尝试从列出当前用户拥有的表的用户表中进行选择。
使用下面的查询显示所有表的名称的Oracle数据库
1 2 3 4 5 | SELECT owner, TABLE_NAME FROM dba_tables; SELECT owner, TABLE_NAME FROM all_tables; SELECT TABLE_NAME FROM user_tables; |
浏览更多:http://www.plsqlininformation.com/2016/08/get-list-of-all-tables-in-oracle.html
有了这些选项,您可以选择:
1 2 3 4 5 6 7 | 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'; |
。
1 | SELECT * FROM dba_tables |
。
仅当登录的用户具有
可以使用Oracle数据字典获取有关Oracle对象的信息。
您可以通过不同的方式获取表列表:
1 2 | SELECT * FROM dba_tables |
号
或者例如:
1 2 3 | SELECT * FROM dba_objects WHERE object_type = 'TABLE' |
然后可以使用表名获取表列:
1 2 | SELECT * FROM dba_tab_columns |
。
然后您可以获得依赖项列表(触发器、视图等):
1 2 3 | SELECT * FROM dba_dependencies WHERE referenced_type='TABLE' AND referenced_name=:t_name |
然后,可以获取此对象的文本源:
1 | SELECT * FROM dba_source |
。
如果需要,可以使用
下面是SQL查询的注释片段,描述了如何使用选项:
1 2 3 4 5 6 7 8 | -- 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; |
号
我找不到可以用的答案
1 | DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES) |
。
所以决定添加我的版本。这个视图实际上返回更多的dba_表,因为它也返回对象表(http://docs.oracle.com/cd/e1882_01/server.112/e40402/statviews_1003.htm)。
包括视图:
1 2 3 4 5 | SELECT owner, TABLE_NAME AS table_view FROM dba_tables UNION ALL SELECT owner, view_name AS table_view FROM DBA_VIEWS |
。
我们可以从下面的查询中获取包括列详细信息的所有表:
1 | SELECT * FROM user_tab_columns; |
号
sqlcl中的一个新特性(它是一个用于Oracle数据库的免费命令行接口)是
这里有几个例子说明了该特性的用法和其他方面。首先,连接到
1 2 | SQL> SET sqlformat ansiconsole -- resizes the columns to the width of the -- data to save space |
号
埃多克斯1〔6〕
1 2 3 4 5 6 7 8 9 | TABLES ----------- REGIONS LOCATIONS DEPARTMENTS JOBS EMPLOYEES JOB_HISTORY .. |
号
为了知道
1 2 3 4 5 | SQL> alias list TABLES TABLES - TABLES <schema> - SHOW TABLES FROM schema -------------------------------------------------- SELECT TABLE_NAME"TABLES" FROM user_tables |
号
您不必定义这个别名,因为它在sqlcl下是默认的。如果要使用新的用户定义别名列出特定架构中的表,并将架构名称作为绑定参数传递,并且只显示一组列,则可以使用
埃多克斯1〔9〕
此后,您可以简单地将模式名作为参数传递
埃多克斯1〔10〕
1 2 3 4 5 6 7 8 9 10 11 12 | OWNER TABLE_NAME LAST_ANALYZED HR DUMMY1 18-10-18 HR YOURTAB2 16-11-18 HR YOURTABLE 01-12-18 HR ID_TABLE 05-12-18 HR REGIONS 26-05-18 HR LOCATIONS 26-05-18 HR DEPARTMENTS 26-05-18 HR JOBS 26-05-18 HR EMPLOYEES 12-10-18 .. .. |
号
一个更复杂的预定义别名称为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SQL> tables2 TABLES ====== TABLE_NAME NUM_ROWS BLOCKS UNFORMATTED_SIZE COMPRESSION INDEX_COUNT CONSTRAINT_COUNT PART_COUNT LAST_ANALYZED AN_IP_TABLE 0 0 0 Disabled 0 0 0 > MONTH PARTTABLE 0 0 0 1 0 1 > MONTH TST2 0 0 0 Disabled 0 0 0 > MONTH TST3 0 0 0 Disabled 0 0 0 > MONTH MANAGE_EMPLYEE 0 0 0 Disabled 0 0 0 > MONTH PRODUCT 0 0 0 Disabled 0 0 0 > MONTH ALL_TAB_X78EHRYFK 0 0 0 Disabled 0 0 0 > MONTH TBW 0 0 0 Disabled 0 0 0 > MONTH DEPT 0 0 0 Disabled 0 0 0 > MONTH |
号
要了解它在后台运行的查询,请输入
1 | alias list tables2 |
号
这将向您展示一个稍微复杂一些的查询,以及SQL*PLUS中常用的预定义
Jeff Smith在这里解释了更多别名
我正在寻找一个所有列名称的列表,这些列名称属于按列ID顺序排序的架构表。
以下是我使用的查询:
1 2 3 4 | SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name' ORDER BY COLUMN_ID ASC; |
号
下面的查询只列出了所需的数据,而其他的回答给了我额外的数据,这只会让我困惑。
1 | SELECT TABLE_NAME FROM user_tables; |
号