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

voj3qocg  于 2023-04-20  发布在  Oracle
关注(0)|答案(3)|浏览(179)

我正在开发一个Oracle数据库模式可视化工具。所以,作为第一步,我想,我首先需要获得所有的模式细节(表和表之间的关系,约束也可能)。
要获得这些信息,返回结果的SQL命令是什么?
(the DESCRIBE命令不返回有关所有表的信息)

编辑#1

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

aemubtdh

aemubtdh1#

我做了类似的事情。我通过OPENQUERY语句直接从Oracle数据库中读取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
SELECT 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
a14dhokn

a14dhokn2#

你可以这样开始:

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

这将对所有创建表的DDL进行逆向工程,但不会给予当前的表/列统计信息。
一些工具(例如Oracle的Data Modeler/ SQL Developer)允许你将它们指向一个数据库,它会将数据库模型逆向工程到一个图表中,这将是一个很好的开始表之间的关系的地方。

j2cgzkjk

j2cgzkjk3#

MongoDB支持JSON文档,所以解决这个问题的最好方法是将数据库元数据提取到JSON文档中。您可以使用SchemaCrawler将数据库元数据提取为JSON。
Sualeh Fatehi,SchemaCrawler

相关问题