获取Oracle中所有表的列表?

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

2313775 次浏览
SELECT owner, table_nameFROM dba_tables

这是假设您可以访问DBA_TABLES数据字典视图。如果您没有这些权限但需要它们,您可以请求DBA显式授予您对该表的权限,或者DBA授予您SELECT ANY DICTIONARY权限或SELECT_CATALOG_ROLE角色(两者中的任何一个都允许您查询任何数据字典表)。当然,您可能希望排除某些模式,如SYSSYSTEM,它们有大量您可能不关心的Oracle表。

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

SELECT owner, table_nameFROM all_tables

虽然,这可能是数据库中可用表的子集(ALL_TABLES显示您的用户已被授予访问权限的所有表的信息)。

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

SELECT table_nameFROM user_tables

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

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

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

查询user_tablesdba_tables不起作用。
这个是:

select table_name from all_tables

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

例如:

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

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

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

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

tabsdba_tablesall_tablesuser_tables
select * from dba_tables

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

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

  SELECT table_name FROM user_tables;

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

SELECT DISTINCT OWNER, OBJECT_NAMEFROM DBA_OBJECTSWHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME';
SELECT DISTINCT OWNER, OBJECT_NAMEFROM ALL_OBJECTSWHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME';

为了更好地查看sqlplus

如果您使用的是sqlplus,您可能希望首先设置一些参数,以便在您的列被破坏时更好地查看(这些变量在您退出sqlplus会话后不应保留):

set colsep '|'set linesize 167set pagesize 30set 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 object_name from user_objects where object_type='TABLE';

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

    select * from tab;

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

    select table_name from user_tables;

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

select table_name from user_tables;

下面是SQL查询的注释片段,描述了如何使用选项:

-- need to have select catalog roleSELECT * FROM dba_tables;
-- to see tables of your schemaSELECT * FROM user_tables;
-- tables inside your schema and tables of other schema which you possess select grants onSELECT * FROM all_tables;

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

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

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

select *from dba_tables

或例如:

select *from dba_objectswhere object_type = 'TABLE'

然后您可以使用表名称获取表列:

select *from dba_tab_columns

然后您可以获得依赖项列表(触发器、视图等):

select *from dba_dependencieswhere referenced_type='TABLE' and referenced_name=:t_name

然后你可以得到这个对象的文本源:

select * from dba_source

如果需要,您可以使用USERALL视图而不是DBA

我没有找到答案这将指向使用

DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)

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

包括意见:

SELECT owner, table_name as table_viewFROM dba_tablesUNION ALLSELECT owner, view_name as table_viewFROM DBA_VIEWS

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

SELECT * FROM user_tab_columns;

我正在寻找一个列表,其中包含属于一个模式表的所有列名,按列id的顺序排序。

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

SELECT COLUMN_NAMEFROM ALL_TAB_COLUMNSWHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'ORDER BY COLUMN_ID ASC;

SQL cl(Oracle数据库的免费命令行界面)中提供的新功能是

#0别名。

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

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

SQL> tables

TABLES-----------REGIONSLOCATIONSDEPARTMENTSJOBSEMPLOYEESJOB_HISTORY..

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

SQL> alias list tablestables - 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_ANALYZEDHR      DUMMY1                   18-10-18HR      YOURTAB2                 16-11-18HR      YOURTABLE                01-12-18HR      ID_TABLE                 05-12-18HR      REGIONS                  26-05-18HR      LOCATIONS                26-05-18HR      DEPARTMENTS              26-05-18HR      JOBS                     26-05-18HR      EMPLOYEES                12-10-18....

更复杂的预定义别名称为#0,它显示其他几个列。

SQL> tables2
Tables======TABLE_NAME                 NUM_ROWS   BLOCKS   UNFORMATTED_SIZE COMPRESSION     INDEX_COUNT   CONSTRAINT_COUNT   PART_COUNT LAST_ANALYZEDAN_IP_TABLE                       0        0                  0 Disabled                  0                  0            0 > MonthPARTTABLE                         0        0                  0                           1                  0            1 > MonthTST2                              0        0                  0 Disabled                  0                  0            0 > MonthTST3                              0        0                  0 Disabled                  0                  0            0 > MonthMANAGE_EMPLYEE                    0        0                  0 Disabled                  0                  0            0 > MonthPRODUCT                           0        0                  0 Disabled                  0                  0            0 > MonthALL_TAB_X78EHRYFK                 0        0                  0 Disabled                  0                  0            0 > MonthTBW                               0        0                  0 Disabled                  0                  0            0 > MonthDEPT                              0        0                  0 Disabled                  0                  0            0 > Month

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

alias list tables2

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

Jeff Smith解释了更多关于别名的信息<强>这里

事实上,可以通过SQL获得表的列表queries.it也可以通过允许生成数据字典的工具来做到这一点,例如ERWIN数据建模工具ERBuilder。使用这些工具,除了表名称之外,您还将拥有字段、它们的类型、对象,例如(触发器、序列、域、视图…)

以下步骤用于生成表定义:

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

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

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

开头的这个额外的'all'给出了额外的3列,它们是:

OBJECT_ID_TYPETABLE_TYPE_OWNERTABLE_TYPE

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

Select  owner, table_name  from all_tables;

如果您有dba权限,您可以使用:

Select owner, table_name from dba_tables;

执行以下命令:

显示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;下图说明了可以从user_tables、all_tables和dba_tables视图返回的表:

当前用户登录模式中的表

select * from tabs;