在項目驗收過程中,需要準備數據字典設計文檔,大批量的表如果通過手工逐個複製並進行轉化會耗費大量的精力。那麼,既然表能存在數據庫中,那麼必然對應存在相應的表進行存儲,只要找到對應的表,完全可以自己經由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)。