通過SQL獲取Oracle數據庫表結構(生成EXCEL和WORD)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章