如何查询Oracle数据库以显示其中所有表的名称?
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的列.
在计算要加入的列时,这可能会有所帮助,例如,取决于您的表和列命名约定.
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;
这应该产生看起来相当可接受的东西,如:
简单查询为当前用户选择表:
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中选择,其中列出了当前用户拥有的表.
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
有了这些,您可以选择:
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
权限时,才会提供所有用户的所有表.