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


当前回答

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

这是我使用的查询:-

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

其他回答

    select object_name from user_objects where object_type='TABLE';

---------------- 或 ------------------

    select * from tab;

---------------- 或 ------------------

    select table_name from user_tables;

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

例如:

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

查找名称以EST开头的所有表以及名称中任何位置包含CALLREF的列。

例如,根据表和列的命名约定,这可以帮助确定要连接哪些列。

执行以下命令:

显示Oracle数据库中的所有表

SELECT table_name FROM dba_tables;

显示当前用户拥有的表

SELECT table_name FROM user_tables;

显示当前用户可以访问的表

sql> SELECT table_name FROM all_tables

SQLcl(Oracle数据库的免费命令行接口)中的一个新特性是

表别名。

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

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

SQL >表

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

要知道表的别名指的是什么,可以简单地使用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 . SQL

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中常用的预定义列定义。

Jeff Smith在这里解释了更多关于别名的知识

您可以使用Oracle数据字典来获取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

如果您愿意,可以使用USER或ALL视图而不是DBA视图。