获取Oracle中所有表的列表?

vit*_*ule 1073 sql oracle

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

Jus*_*ave 1342

SELECT owner, table_name
  FROM dba_tables
Run Code Online (Sandbox Code Playgroud)

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

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

SELECT owner, table_name
  FROM all_tables
Run Code Online (Sandbox Code Playgroud)

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

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

SELECT table_name
  FROM user_tables
Run Code Online (Sandbox Code Playgroud)

由于USER_TABLES只有您拥有的表的信息,因此它没有OWNER列 - 根据定义,所有者就是您.

甲骨文公司还拥有一批传统数据字典views--的TAB,DICT,TABS,并CAT为example--可能被使用.一般情况下,我不建议使用这些遗留视图,除非您绝对需要将脚本反向移植到Oracle 6. Oracle在很长一段时间内没有更改这些视图,因此它们经常遇到新类型对象的问题.例如,TABCAT视图都显示有关用户回收站中的表的信息,而[DBA|ALL|USER]_TABLES视图全部过滤掉这些表. CAT还显示有关具有TABLE_TYPE"TABLE"的物化视图日志的信息,这不太可能是您真正想要的. DICT结合表和同义词,并不告诉你谁拥有该对象.

  • 然后,您无权查看数据库中的所有表.您可以查询ALL_TABLES数据字典视图以查看允许访问的所有表,这些表可能是数据库中表的一小部分. (44认同)
  • 我收到异常"ORA-00942:表或视图不存在" (8认同)

vit*_*ule 177

查询user_tablesdba_tables没有奏效.
这个做了:

select table_name from all_tables  
Run Code Online (Sandbox Code Playgroud)

  • @LimitedAtonement对不起,这是完全错的.该视图称为user_tables,而不是user_table.如果user_tables不适用于vitule,则还有其他问题. (14认同)

小智 66

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

例如:

SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我做了`从cols`中选择*并返回了0行. (4认同)

cwd*_*cwd 49

为了更好地观看 sqlplus

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

set colsep '|'
set linesize 167
set pagesize 30
set pagesize 1000
Run Code Online (Sandbox Code Playgroud)

显示所有表格

然后,您可以使用这样的内容来查看所有表名:

SELECT table_name, owner, tablespace_name FROM all_tables;
Run Code Online (Sandbox Code Playgroud)

显示您自己的表格

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

SELECT table_name FROM user_tables;
Run Code Online (Sandbox Code Playgroud)

不要忘记观点

请记住,一些"表"实际上可能是"视图",因此您也可以尝试运行以下内容:

SELECT view_name FROM all_views;
Run Code Online (Sandbox Code Playgroud)

结果

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

结果

  • 感谢"更好的观看"建议,但是你不是用`pagesize 1000`覆盖`pagesize 30`吗? (8认同)

Isr*_*ies 23

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

  SELECT table_name FROM user_tables;
Run Code Online (Sandbox Code Playgroud)


小智 19

    select object_name from user_objects where object_type='TABLE';
Run Code Online (Sandbox Code Playgroud)

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

    select * from tab;
Run Code Online (Sandbox Code Playgroud)

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

    select table_name from user_tables;
Run Code Online (Sandbox Code Playgroud)


小智 15

尝试以下数据字典视图.

tabs
dba_tables
all_tables
user_tables
Run Code Online (Sandbox Code Playgroud)


Edd*_*wad 9

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


Bra*_*y K 8

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


Van*_*ogh 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';
Run Code Online (Sandbox Code Playgroud)


小智 6

select * from dba_tables
Run Code Online (Sandbox Code Playgroud)

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

  • 这实际上是不正确的.不需要SYSDBA.您可以通过多种方式访问​​DBA_TABLES.1.)由SYS直接授予用户对象.2.)向用户授予SELECT ANY DICTIONARY特权.3.)授予SELECT_CATALOG_ROLE角色. (4认同)

Rus*_*sty 5

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

DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)
Run Code Online (Sandbox Code Playgroud)

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


Kau*_*yak 5

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

Tables别名。

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

SQL> set sqlformat ansiconsole     -- resizes the columns to the width of the 
                                   -- data to save space 
Run Code Online (Sandbox Code Playgroud)

SQL> tables

TABLES
-----------
REGIONS
LOCATIONS
DEPARTMENTS
JOBS
EMPLOYEES
JOB_HISTORY
..
Run Code Online (Sandbox Code Playgroud)

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

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

 select table_name "TABLES" from user_tables
Run Code Online (Sandbox Code Playgroud)

您不必定义此别名,因为它默认位于 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
..
..
Run Code Online (Sandbox Code Playgroud)

更复杂的预定义别名称为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
Run Code Online (Sandbox Code Playgroud)

要了解它在后台运行什么查询,请输入

alias list tables2
Run Code Online (Sandbox Code Playgroud)

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

Jeff Smith在此处解释了有关别名的更多信息


Pra*_*ato 5

执行以下命令:

显示 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 视图返回的表: