Oracle:哪个SQL命令可以获取有关表的所有详细信息?

时间:2016-05-03 21:33:04

标签: sql oracle schema

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

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

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

编辑#1

实际上,我想要做的是获取所有关于所有表的信息(列,行,外键,约束)以将它们存储在MongoDB数据库中,然后创建可视化(不包括图表)< / p>

3 个答案:

答案 0 :(得分:0)

你可以从:

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

这将对所有创建表的DDL进行反向工程。它不会为您提供当前的表/列统计信息。

某些工具(例如Oracle的Data Modeller / SQL Developer)允许您将它们指向数据库,并将数据库模型反向工程为图表。这将是开始表之间关系的好地方。

答案 1 :(得分:0)

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

Sualeh Fatehi,SchemaCrawler

答案 2 :(得分:0)

我做类似的事情。我直接从Oracle数据库通过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