如何查询Oracle数据库以显示其中所有表的名称?
答案 0 :(得分:1291)
SELECT owner, table_name
FROM dba_tables
这假设您可以访问DBA_TABLES
数据字典视图。如果您没有这些权限但需要它们,则可以请求DBA明确授予您对该表的权限,或者DBA授予您SELECT ANY DICTIONARY
权限或SELECT_CATALOG_ROLE
角色(这将允许您查询任何数据字典表)。当然,您可能希望排除某些模式,例如SYS
和SYSTEM
,这些模式具有您可能不关心的大量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还有许多遗留数据字典视图 - 例如TAB
,DICT
,TABS
和CAT
- 可以使用。一般情况下,我不建议使用这些遗留视图,除非您绝对需要将脚本反向移植到Oracle 6. Oracle在很长一段时间内没有更改这些视图,因此它们经常遇到新类型对象的问题。例如,TAB
和CAT
视图都显示有关用户回收站中的表的信息,而[DBA|ALL|USER]_TABLES
视图都会过滤掉这些表。 CAT
还会显示有关TABLE_TYPE
“TABLE”的物化视图日志的信息,这可能不是您真正想要的。 DICT
结合了表和同义词,并没有告诉你谁拥有该对象。
答案 1 :(得分:173)
查询user_tables
和dba_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;
这应该产生看起来相当可接受的东西,如:
答案 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
如果您愿意,可以使用USER
或ALL
次观看而不是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查询获得表列表。也可以通过允许生成数据字典的工具(例如ERWIN,Toad Data Modeler或{ {3}}。使用这些工具,除了表名之外,您还将拥有字段,它们的类型,对象(触发,序列,域,视图...)
按照以下步骤生成表定义:
您的数据库将在软件中显示为实体关系图。
答案 19 :(得分:1)
执行以下命令:
显示Oracle数据库中的所有表
sql> SELECT table_name FROM dba_tables;
显示当前用户拥有的表
sql> SELECT table_name FROM user_tables;
显示当前用户可访问的表
答案 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;