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