获取Oracle中所有表的列表?
如何查询Oracle数据库以显示其中所有表的名称?
SELECT owner, table_name FROM dba_tables
这是假设您有权访问DBA_TABLES
数据字典视图。 如果您没有这些权限但需要它们,则可以请求DBA明确授予您对该表的权限,或者,DBA授予您“ SELECT ANY DICTIONARY
特权或“ SELECT_CATALOG_ROLE
angular色(其中任一个都允许您查询任何数据字典表)。 当然,你可能想要排除一些像SYS
和SYSTEM
这样的具有大量你可能不关心的Oracle表的模式。
或者,如果您无权访问DBA_TABLES
,则可以通过ALL_TABLES
视图查看您的帐户有权访问的所有表格:
SELECT owner, table_name FROM all_tables
尽pipe这可能是数据库中可用表的子集( ALL_TABLES
显示了您的用户已被授权访问的所有表的信息)。
如果您只关心您拥有的表,而不是那些您有权访问的表,则可以使用USER_TABLES
:
SELECT table_name FROM user_tables
由于USER_TABLES
只包含有关您拥有的表的信息,因此它没有OWNER
列 – 根据定义,所有者就是您。
Oracle也有一些传统的数据字典视图 – 例如TAB
, DICT
, TABS
和CAT–可以使用。 一般来说,我不会build议使用这些遗留的视图,除非你绝对需要将你的脚本移植到Oracle 6上.Oracle并没有长时间改变这些视图,所以他们经常遇到新types的对象的问题。 例如, TAB
和CAT
视图都显示关于用户的回收站中的表的信息,而[DBA|ALL|USER]_TABLES
视图都将这些信息过滤掉。 CAT
还用“TABLE”的TABLE_TYPE
显示关于物化视图日志的信息,这不太可能是您真正想要的。 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%';
find名称以EST开头的所有表格和名称中任何地方包含CALLREF的列。
这可以帮助您计算想要join的列,例如,取决于您的表和列命名约定。
为了更好地查看与sqlplus
如果你使用的是sqlplus
你可能需要首先设置一些参数,以便更好的查看,如果你的列正在被损坏(这些variables不应该在你退出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;
结果
这应该产生看起来相当可接受的东西,如:
简单查询为当前用户select表格:
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
尝试从user_tables中select列出当前用户拥有的表。
有了这些,你可以select:
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
只有当您login的用户具有sysdba
权限时,才会提供所有用户的所有表。
有3个datadictinary这个
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
我没有find答案,指出使用
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 table_name from user_tables;
从dba_tables中select*; – 需要select目录angular色
从user_tables中select*;查看模式的表
从all_tables中select* – 你的文件中的表格和你拥有select资助的orher模式表格
Oracle数据库使用以下查询来显示所有表的名称
SELECT所有者,table_name FROM dba_tables; SELECT所有者,table_name FROM all_tables; SELECT table_name FROM user_tables;
vist more: http : //www.oracleinformation.com/2016/08/get-list-of-all-tables-in-oracle-sql.html
包括意见:
SELECT owner, table_name as table_view FROM dba_tables UNION ALL SELECT owner, view_name as table_view FROM DBA_VIEWS