获取Oracle中所有表的列表?

时间:2008-10-15 17:54:49

标签: sql oracle

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

25 个答案:

答案 0 :(得分:1291)

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_TYPE“TABLE”的物化视图日志的信息,这可能不是您真正想要的。 DICT结合了表和同义词,并没有告诉你谁拥有该对象。

答案 1 :(得分:173)

查询user_tablesdba_tables无法正常工作 这个做了:

select table_name from all_tables  

答案 2 :(得分:62)

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

例如:

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

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

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

答案 3 :(得分:48)

使用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;

结果

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

result

答案 4 :(得分:21)

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

  SELECT table_name FROM user_tables;

答案 5 :(得分:17)

    select object_name from user_objects where object_type='TABLE';

---------------- OR ------------------

    select * from tab;

---------------- OR ------------------

    select table_name from user_tables;

答案 6 :(得分:14)

尝试以下数据字典视图。

tabs
dba_tables
all_tables
user_tables

答案 7 :(得分: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

答案 8 :(得分:8)

尝试从user_tables中选择,其中列出了当前用户拥有的表格。

答案 9 :(得分:6)

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

答案 10 :(得分:6)

使用其中任何一个,您可以选择:

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

答案 11 :(得分:5)

select * from dba_tables
只有当您登录的用户具有sysdba权限时,

才会提供所有用户的所有表格。

答案 12 :(得分:3)

下面是一个注释的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;

答案 13 :(得分:3)

您可以使用Oracle Data Dictionary获取有关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

答案 14 :(得分:3)

我没有找到指向使用的答案

DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)

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

答案 15 :(得分:3)

包括观点:

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

答案 16 :(得分:3)

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

SELECT * FROM user_tab_columns;

答案 17 :(得分:2)

SQLcl(Oracle数据库的免费命令行界面)中的一项新功能是

Tables 别名。

以下是一些示例,展示了此功能的用法和其他方面。首先,连接到sql命令行(在Windows中为sql.exe)会话。建议在运行任何其他显示数据的命令或查询之前输入此sqlcl特定命令。

SQL> set sqlformat ansiconsole     -- resizes the columns to the width of the 
                                   -- data to save space 

SQL> tables

TABLES
-----------
REGIONS
LOCATIONS
DEPARTMENTS
JOBS
EMPLOYEES
JOB_HISTORY
..

要知道tables别名是指什么,您可以简单地使用alias list <alias>

SQL> alias list tables
tables - tables <schema> - show tables from schema
--------------------------------------------------

 select table_name "TABLES" from user_tables

您不必定义此别名,因为默认情况下它是SQLcl的名称。如果要从特定架构中列出表,请使用新的用户定义的别名并将架构名称作为绑定参数(仅显示一组列)来传递,则可以使用

SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;

此后,您可以简单地将模式名称作为参数传递

SQL> tables_schema HR

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
..
..

更复杂的预定义别名称为 Tables2 ,该别名显示其他几列。

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

要知道该查询在后台运行什么,请输入

alias list tables2

这将向您显示一个稍微复杂的查询以及SQL * Plus中常用的预定义column定义。

杰夫·史密斯详细说明了别名here

答案 18 :(得分:1)

实际上,可以通过SQL查询获得表列表。也可以通过允许生成数据字典的工具(例如ERWINToad Data Modeler或{ {3}}。使用这些工具,除了表名之外,您还将拥有字段,它们的类型,对象(触发,序列,域,视图...)

按照以下步骤生成表定义:

  1. 您必须对数据库进行反向工程
    • 在Toad数据建模器中:菜单->文件->反向工程->反向工程向导
    • 在ERBuilder数据建模器中:菜单->文件->逆向工程

您的数据库将在软件中显示为实体关系图。

  1. 生成将包含表定义的数据字典
    • 在Toad数据建模器中:菜单->模型->生成报告->运行
    • 在ERBuilder数据建模器中:菜单->工具->生成模型文档

答案 19 :(得分:1)

执行以下命令:

显示Oracle数据库中的所有表

sql> SELECT table_name FROM dba_tables;

显示当前用户拥有的表

sql> SELECT table_name FROM user_tables;

显示当前用户可访问的表

sql> SELECT table_name FROM all_tables ORDER BY table_name; The following picture illustrates the tables that can be returned from the user_tables, all_tables, and dba_tables views:

答案 20 :(得分:0)

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

select table_name from user_tables;

答案 21 :(得分:0)

我希望获得属于按列ID顺序排序的架构表的所有列名称的列表。

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

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

答案 22 :(得分:0)

select * from all_all_tables

开头的额外“全部”给出了额外的3列:

OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE

答案 23 :(得分:0)

要获取所有表名,我们可以使用:

Select  owner, table_name  from sys.all_tables;

要获取所有表的列名,我们可以使用:

Select owner, table_name, column_name, data_type, data_length from sys.all_tab_columns

答案 24 :(得分:0)

当前用户中的表-登录架构

select * from tabs;