通过SQL获取Oracle数据库表结构(生成EXCEL和WORD)

在项目验收过程中,需要准备数据字典设计文档,大批量的表如果通过手工逐个复制并进行转化会耗费大量的精力。那么,既然表能存在数据库中,那么必然对应存在相应的表进行存储,只要找到对应的表,完全可以自己经由java后台自己生成并转化成对应的文档,经过一番实验,得出以下效果(html,可转化为Excel或者Word)。

通过SQL获取Oracle数据库表结构(生成EXCEL和WORD)_第1张图片

首先,是表结构相关的获取。这里需要先介绍下oracle数据库中自身提供并用到的视图:

(1)all_tables  : 当前数据库下所有用户下的表信息,主要包括所属用户(owner),表名(table_name), 表空间(tablespace_name),以及表创建时自动生成的参数,适用于多用户数据库;

(2)user_tables:当前用户下所有表信息,主要包括所属用户(owner),表名(table_name), 表空间(tablespace_name),以及表创建时自动生成的参数,适用于单用户数据库;

(3)all_tab_comments: 当前数据库下所有用户下的表注释信息;

(4)user_tab_comments: 当前用户下所有表注释信息;

通过以上两个表,可以通过sql过滤获取需要的表信息(单用户的不再列出)。

其次,就是通过获取的表名获取表的字段信息通过html table的形式拼接出来。用到的视图如下:

(1)all_tab_cols:当前数据库下所有用户下的表字段信息;

(2)all_col_comments:当前数据库下所有用户下的表字段注释信息;

以下是部分查询SQL(获取字段、字段属性、字段注释和是否为空):

select to_char(t.column_id) column_id,
       t.column_name,
       case
         when t.data_type = 'VARCHAR2' then
          t.data_type || '(' || t.data_length || ')'
         else
          t.data_type
       end data_type,
       m.comments,
       t.nullable
  from all_tab_cols t, all_col_comments m
 where t.table_name = m.table_name
   and t.owner = m.owner
   and t.column_name = m.column_name
   and t.table_name = '"+table_name+"'
   and t.owner = '"+owner+"'
 order by t.column_id

 

最后是表创建SQL,这里涉及到表的主键和索引,用到的视图如下:

(1)user_indexes:当前用户表索引信息表,包含索引的一些初始化参数;

(2)user_ind_columns:当前用户索引列表,包含索引对应的字段;

(3)user_constraints:当前用户表约束的视图,constraint_type = 'P' 的是主键;

注:在user_indexes表中主键也是以索引信息的数据记录的,需要关联user_constraints表进行筛选。

以上,就能够生成自己想要的html表单信息(自己拼装html table)。

你可能感兴趣的:(学海无涯)