【问题标题】:Oracle : which SQL command to get all details about a table?Oracle:获取有关表的所有详细信息的 SQL 命令是什么?
【发布时间】:2016-08-29 02:59:42
【问题描述】:

我正在开发一个 Oracle 数据库模式可视化工具。所以,作为第一步,我想,我首先需要获取所有架构细节(表和表之间的关系,也可能是约束)。

要获取该信息,返回结果的 SQL 命令是什么?

DESCRIBE 命令不返回所有表的信息)

编辑#1

其实,我想做的是把我提到的所有表的所有信息(列、行​​、外键、约束)存储在MongoDB数据库中,然后创建可视化(不包括图表)

【问题讨论】:

  • 对此没有单一的说法。您需要查询几个系统表:docs.oracle.com/database/121/REFRN/toc.htmall_tables 开头,然后您需要all_tab_columns 可能是all_indexesall_ind_columnsall_ind_expression。如果你想要约束,你需要all_constraintsall_cons_columns。顺便说一句:describe 不是 SQL 语句。这是一个特定于 SQL*Plus 的命令,无论如何都不能在编程语言中使用

标签: sql oracle schema


【解决方案1】:

我做类似的事情。我直接从 Oracle DB 中通过 OPENQUERY 语句从 SQL Server 读取这些内容,并将结果保存到 SQL Server 表中,以便分析历史比较架构信息和更改。

因此,您对以下查询的结果集要做的就是以某种方式(定期)存储它们,并向其中添加某种唯一/主键或时间戳,以便区分不同的扫描。

撇开 SQL Server 特定的代码,这些是我目前使用的基本 oracle sql 查询:

--Tables
SELECT table_name, owner, Tablespace_name, Num_Rows 
FROM all_tables WHERE tablespace_name is not NULL 
AND owner not in ('SYS', 'SYSTEM') 
ORDER BY  owner, table_name;

--Columns
SLECT OWNER, TABLE_NAME, Column_name, Data_type, data_length, data_precision, NULLABLE, character_Set_Name  
From all_tab_cols 
where USER_GENERATED = 'YES' 
AND owner not in ('SYS', 'SYSTEM');

--Indexes
select Owner, index_name, table_name, uniqueness,BLEVEL,STATUS from ALL_INDEXES
WHERE owner not in ('SYS', 'SYSTEM') 

--Constraints
select owner, constraint_name, constraint_type, table_name, search_condition, status, index_name, index_owner 
From all_constraints 
WHERE generated = 'USER NAME'
AND owner not in ('SYS', 'SYSTEM') 

--Role Previleges
select grantee, granted_role, admin_option, delegate_option, default_role, common
From DBA_ROLE_PRIVS

--Sys Privileges
select grantee, privilege, admin_option, common
From DBA_SYS_PRIVS 

【讨论】:

    【解决方案2】:

    MongoDB 支持 JSON 文档,因此解决问题的最佳方法是将数据库元数据提取到 JSON 文档中。您可以使用SchemaCrawler 将数据库元数据提取为 JSON。

    Sualeh Fatehi,SchemaCrawler

    【讨论】:

      【解决方案3】:

      你可以从:

      select DBMS_METADATA.GET_DDL ('TABLE', table_name,user) from user_tables;
      

      这将对创建表的所有 DDL 进行逆向工程。它不会给你当前的表/列统计信息。

      一些工具(例如 Oracle 的 Data Modeller / SQL Developer)将允许您将它们指向一个数据库,它会将数据库模型逆向工程为图表。这将是表之间关系的一个很好的起点。

      【讨论】:

      • 其实我想做的是把我提到的所有表的所有信息(列、行​​、外键、约束)存储到MongoDB数据库中,然后创建可视化(图表不包括在内)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      • 2021-12-27
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多