Answers:
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
列–根据定义,所有者是您。
甲骨文也有一些遗留的数据字典views-- TAB
,DICT
,TABS
,并CAT
为example--可能被使用。通常,除非绝对需要将脚本反向移植到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;
这将产生看起来相当可接受的内容,例如:
pagesize 30
用pagesize 1000
?
简单查询以选择当前用户的表:
SELECT table_name FROM user_tables;
尝试以下数据字典视图。
tabs
dba_tables
all_tables
user_tables
尝试从user_tables中选择,该列表列出了当前用户拥有的表。
Oracle数据库使用以下查询显示所有表的名称
SELECT所有者,table_name FROM dba_tables; SELECT所有者,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
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)。
您可以使用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
如果需要的话。
我们可以从以下查询中获取所有表,包括列详细信息:
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;
SQLcl(这是Oracle数据库的免费命令行界面)中提供的一项新功能是
Tables
别名。
以下是一些示例,显示了此功能的用法和其他方面。首先,连接到sql
命令行(sql.exe
在Windows中)会话。建议在运行任何其他显示数据的命令或查询之前输入此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
这将向您显示一个稍微复杂的查询以及column
SQL * Plus中常用的预定义定义。
杰夫·史密斯(Jeff Smith)在此处详细说明了别名
我一直在寻找一个列表,该列表包含属于模式表的所有列名称,这些列按列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)来做到这一点。使用这些工具,除了表名之外,您还将具有字段,它们的类型,对象(触发,序列,域,视图...)
按照以下步骤生成表定义:
您的数据库将在软件中显示为“实体关系”图。
SHOW TABLES
工作(如在MySQL做)?