首页 文章

获取Oracle中所有表的列表?

提问于
浏览
981

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

19 回答

  • 3

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

    SELECT table_name FROM user_tables;
    
  • 6

    我没有找到可以指出使用的答案

    DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)
    

    所以决定添加我的版本 . 这个视图实际上返回的更多是DBA_TABLES,因为它返回对象表(http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm) .

  • 1237

    包括观点:

    SELECT owner, table_name as table_view
      FROM dba_tables
    UNION ALL
    SELECT owner, view_name as table_view
      FROM DBA_VIEWS
    
  • 0

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

  • 5

    我们可以从以下查询获取所有表格,包括列详细信息:

    SELECT * FROM user_tab_columns;
    
  • 14
    select * from dba_tables
    

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

  • 0

    以下查询仅列出所需数据,而其他答案给了我额外的数据,这只会让我困惑 .

    select table_name from user_tables;
    
  • 166

    使用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;
    

    结果

    这应该产生看起来相当可接受的东西,如:

    result

  • 20

    尝试以下数据字典视图 .

    tabs
    dba_tables
    all_tables
    user_tables
    
  • 3

    为此存在3个数据

    DBA_TABLES describes all relational tables in the database.

    SELECT owner, table_name
      FROM dba_tables
    

    Description of relational tables accessible to the user

    SELECT owner, table_name
      FROM all_tables
    

    USER_TABLES 描述了当前用户拥有的关系表 . 此视图不显示 OWNER 列 .

    SELECT table_name
      FROM user_tables
    
  • 5

    下面是一个注释的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;
    
  • 16

    您可以使用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
    

    如果需要,您可以使用 USERALL 视图而不是 DBA .

  • 8
    SELECT owner, table_name
      FROM dba_tables
    

    这假设您可以访问 DBA_TABLES 数据字典视图 . 如果您没有这些权限但需要它们,则可以请求DBA明确授予您对该表的权限,或者DBA授予您 SELECT ANY DICTIONARY 权限或 SELECT_CATALOG_ROLE 角色(其中任何一个都允许您查询任何数据)字典表) . 当然,您可能希望排除某些模式,例如 SYSSYSTEM ,这些模式具有您可能不关心的大量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还有许多遗留数据字典视图 - 例如 TABDICTTABSCAT --可以使用 . 一般情况下,我不建议使用这些遗留视图,除非您绝对需要将脚本反向移植到Oracle 6. Oracle长时间没有更改这些视图,因此它们经常遇到新类型对象的问题 . 例如, TABCAT 视图都显示有关用户回收站中的表的信息,而 [DBA|ALL|USER]_TABLES 视图都会过滤掉这些表 . CAT 还显示有关具有 TABLE_TYPE "TABLE"的物化视图日志的信息,这不太可能是您真正想要的 . DICT 结合了表和同义词,并没有告诉你谁拥有该对象 .

  • 3
    select object_name from user_objects where object_type='TABLE';
    
                  • 要么 - - - - - - - - -
    select * from tab;
    
                  • 要么 - - - - - - - - -
    select table_name from user_tables;
    
  • 60

    我希望获得属于按列id顺序排序的模式表的所有列名称的列表 .

    这是我正在使用的查询: -

    SELECT COLUMN_NAME
    FROM ALL_TAB_COLUMNS
    WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
    ORDER BY COLUMN_ID ASC;
    
  • 3

    有了这些,你可以选择:

    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';
    
  • 45

    查询 user_tablesdba_tables 无法正常工作 .
    这个做了:

    select table_name from all_tables
    
  • 8

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

    例如:

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

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

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

  • 3

    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

相关问题