当前位置:  开发笔记 > 编程语言 > 正文

获取Oracle中所有表的列表?

如何解决《获取Oracle中所有表的列表?》经验,为你挑选了11个好方法。

如何查询Oracle数据库以显示其中所有表的名称?



1> Justin Cave..:
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在很长一段时间内没有更改这些视图,因此它们经常遇到新类型对象的问题.例如,TABCAT视图都显示有关用户回收站中的表的信息,而[DBA|ALL|USER]_TABLES视图全部过滤掉这些表. CAT还显示有关具有TABLE_TYPE"TABLE"的物化视图日志的信息,这不太可能是您真正想要的. DICT结合表和同义词,并不告诉你谁拥有该对象.


然后,您无权查看数据库中的所有表.您可以查询ALL_TABLES数据字典视图以查看允许访问的所有表,这些表可能是数据库中表的一小部分.
我收到异常"ORA-00942:表或视图不存在"

2> vitule..:

查询user_tablesdba_tables没有奏效.
这个做了:

select table_name from all_tables  


@LimitedAtonement对不起,这是完全错的.该视图称为user_tables,而不是user_table.如果user_tables不适用于vitule,则还有其他问题.

3> 小智..:

更进一步,还有另一个名为cols(all_tab_columns)的视图,可用于确定哪些表包含给定的列名.

例如:

SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';

查找名称以EST开头的所有表和名称中包含CALLREF的列.

在计算要加入的列时,这可能会有所帮助,例如,取决于您的表和列命名约定.


我做了`从cols`中选择*并返回了0行.

4> cwd..:

为了更好地观看 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 1000`覆盖`pagesize 30`吗?

5> Israel Margu..:

简单查询为当前用户选择表:

  SELECT table_name FROM user_tables;



6> 小智..:
    select object_name from user_objects where object_type='TABLE';

- - - - - - - - 要么 - - - - - - - - -

    select * from tab;

- - - - - - - - 要么 - - - - - - - - -

    select table_name from user_tables;



7> 小智..:

尝试以下数据字典视图.

tabs
dba_tables
all_tables
user_tables



8> Eddie Awad..:

尝试从user_tables中选择,其中列出了当前用户拥有的表.



9> Brahmareddy ..:

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> Van Gogh..:

有了这些,您可以选择:

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> 小智..:
select * from dba_tables

仅当您登录的用户具有sysdba权限时,才会提供所有用户的所有表.


这实际上是不正确的.不需要SYSDBA.您可以通过多种方式访问​​DBA_TABLES.1.)由SYS直接授予用户对象.2.)向用户授予SELECT ANY DICTIONARY特权.3.)授予SELECT_CATALOG_ROLE角色.
推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有