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
结合了表和同义词,并没有告诉您谁拥有该对象。
查询 user_tables
和 dba_tables
没有用。
这个做到了:
select table_name from all_tables
更进一步,还有另一个名为 cols (all_tab_columns) 的视图可用于确定哪些表包含给定的列名。
例如:
SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';
查找名称以 EST 开头的所有表以及名称中任何位置包含 CALLREF 的列。
这可以帮助您确定要加入哪些列,例如,取决于您的表和列命名约定。
select * from cols
并返回了 0 行。
使用 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;
结果
这应该会产生一些看起来相当可接受的东西,例如:
https://i.stack.imgur.com/s0Hb5.png
为当前用户选择表的简单查询:
SELECT table_name FROM user_tables;
select object_name from user_objects where object_type='TABLE';
- - - - - - - - 或者 - - - - - - - - -
select * from tab;
- - - - - - - - 或者 - - - - - - - - -
select table_name from user_tables;
试试下面的数据字典视图。
tabs
dba_tables
all_tables
user_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 数据库中的所有表
sql> SELECT table_name FROM dba_tables;
显示当前用户拥有的表
sql> SELECT table_name FROM user_tables;
显示当前用户可以访问的表
https://i.stack.imgur.com/10au5.png
使用其中任何一个,您可以选择:
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';
select * from dba_tables
仅当您登录的用户具有 sysdba
权限时,才提供所有用户的所有表。
我没有找到指向使用的答案
DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)
所以决定也添加我的版本。这个视图实际上返回了更多的 DBA_TABLES,因为它也返回了对象表 (http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm)。
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
定义。
Jeff Smith 详细解释了别名here
您可以使用 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
。
包括视图:
SELECT owner, table_name as table_view
FROM dba_tables
UNION ALL
SELECT owner, view_name as table_view
FROM DBA_VIEWS
我们可以从以下查询中获取所有表,包括列详细信息:
SELECT * FROM user_tab_columns;
下面是一段带注释的 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;
下面的查询只列出了所需的数据,而其他答案给了我额外的数据,这让我很困惑。
select table_name from user_tables;
我正在寻找属于按列 ID 顺序排序的模式表的所有列名称的列表。
这是我正在使用的查询:-
SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
ORDER BY COLUMN_ID ASC;
实际上,可以通过 SQL 查询获得表列表。也可以通过允许生成数据字典的工具来实现,例如 ERWIN、Toad Data Modeler 或 ERBuilder。使用这些工具,除了表名之外,您还将拥有字段、它们的类型、对象,例如(触发器、序列、域、视图......)
下面的步骤来生成你的表定义:
您必须对数据库进行逆向工程 在 Toad 数据建模器中:菜单 -> 文件 -> 逆向工程 -> 逆向工程向导 在 ERBuilder 数据建模器中:菜单 -> 文件 -> 逆向工程
您的数据库将在软件中显示为实体关系图。
在 Toad 数据建模器中生成包含表定义的数据字典:菜单 -> 模型 -> 生成报告 -> 在 ERBuilder 数据建模器中运行:菜单 -> 工具 -> 生成模型文档
要获取所有表名,我们可以使用:
Select owner, table_name from all_tables;
如果你有 dba 权限,你可以使用:
Select owner, table_name from dba_tables;
select * from all_all_tables
开头的这个额外的“全部”给出了额外的 3 列,它们是:
OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE
当前用户登录模式中的表
select * from tabs;