oracle,datagrid,生成数据字典
一、概述
系统快要开发完了,甲方要求验收项目的时候提供数据字典文件,但是我们开发的时候注释直接写在实体的字段上了。我们要求提供的数据字典是word文档。要是一个一个的复制那太麻烦了,于是怎么做呢?
(1) 写个小工具类,把所有实体中的注释提取出来生成一个给表中字段添加注释的sql文件;
(2) 执行sql文件将注释添加到数据库表中;
(3) 采用datagrip或者navicat工具查询出你需要的数据字典项,然后导出为excel文件;
(4) 复制到word;
二、步骤
其他步骤略,主要讲解第三步。
1. oracle基表
首先你需要了解一下oracle数据库中的关于表数据列以及列注释的几张基表:
1.获取表:
select table_name from user_tables; //当前用户拥有的表
select table_name from all_tables; //所有用户的表
select table_name from dba_tables; //包括系统表
select table_name from dba_tables where owner='用户名'
2.获取表字段:
select * from user_tab_columns where Table_Name='用户表';
select * from all_tab_columns where Table_Name='用户表';
select * from dba_tab_columns where Table_Name='用户表';
3.获取表注释:
select * from user_tab_comments
user_tab_comments:table_name,table_type,comments
相应的还有dba_tab_comments,all_tab_comments,这两个比user_tab_comments多了ower列。
4.获取字段注释:
select * from user_col_comments
user_col_comments:table_name,column_name,comments
相应的还有dba_col_comments,all_col_comments,这两个比user_col_comments多了ower列。
我们需要生成数据字典需要用到的信息一般有:字段名、字段类型、字段长度、是否非空、备注等。
于是乎,我们可以用获取字段的基表和获取字段注释的基表进行关联,然后查询出你想要的信息,由于我们自己能够确定自己要生成数据字典的表是位于哪个用户,所以可以使用user_tab_columns和user_col_comments组合获取,而且使用这两个表的数据量相对小一些,效率高一些。
2. 获取你需要的数据信息
-- 1.你可以先看下这两个表中都有哪些字段信息
select * from user_tab_columns where TABLE_NAME = 'MEM_LEVEL_TEMP_HISTORY';
select * from user_col_comments where TABLE_NAME = 'MEM_LEVEL_TEMP_HISTORY';
-- 2.核心sql: 可以更具你的需求修改
select
t.COLUMN_NAME as "字段名",
decode(c.COMMENTS, null, ' ', c.COMMENTS) as "含义",
decode(t.DATA_TYPE, 'TIMESTAMP(6)', t.DATA_TYPE, 'NUMBER', (t.DATA_TYPE || '(' || t.DATA_PRECISION || ')'),
'DATE', t.DATA_TYPE, (t.DATA_TYPE || '(' || t.CHAR_LENGTH || ')')) as "长度",
-- t.DATA_TYPE || '(' || t.CHAR_LENGTH || ')' as "类型(长度)",
-- t.CHAR_LENGTH as "字段长度",
t.NULLABLE AS "是否为空",
' ' as "备注"
from USER_TAB_COLUMNS t join USER_COL_COMMENTS c on c.TABLE_NAME = t.TABLE_NAME and t.COLUMN_NAME = c.COLUMN_NAME
where c.TABLE_NAME = 'MEM_LEVEL_TEMP_HISTORY' --表名应该大写
order by t.COLUMN_ID
;
执行sql2,查询出你需要的信息。
navicat工具:选择导出结果,然后将查询结果导出为excel文件,然后从excel复制到word;
或者直接复制查询的结果,然后粘贴到excel表格,然后从excel复制到word;
datagrid工具:修改查询结果的data extractors(数据提取器)的格式为HTML(groovy),如图:
然后复制查询结果,直接粘贴到word。