2013-02-21 52 views
1

此腳本爲Oracle轉儲帶有列和註釋的表(我所做的:以可讀格式轉儲架構DDL,而不依賴任何外部工具,只需要sqlplus,我想要犯這個腳本SVN所以任何團隊成員都可以使用它):只打印第一個唯一的ORDER BY在Oracle中的唯一值sqlplus

 
SELECT dt.table_name, dt.column_name, dt.data_type, dt.data_length, comm.comments 
    FROM user_col_comments comm, user_tab_columns dt 
    WHERE dt.table_name = comm.table_name 
    AND dt.column_name = comm.column_name 
    ORDER BY dt.table_name; 

輸出樣子:

 
TBL111 COL11 ... 
TBL111 COL22 ... 
TBL222 COL11 ... 
TBL222 COL22 ... 
TBL222 COL33 ... 
TBL333 COL11 ... 

爲了使其更具可讀性我期待的方式來跳過不必要的TBLxxx話:

 
TBL111 COL11 ... 
     COL22 ... 
TBL222 COL11 ... 
     COL22 ... 
     COL33 ... 
TBL333 COL11 ... 

有什麼建議嗎?

回答

4

當您使用SQL * Plus生成報表時,可以使用BREAK ON columnname來抑制查詢結果中的重複項。

+0

工程就像一個魅力!謝謝。 +1 – gavenkoa 2013-02-21 09:30:21

1
SELECT case 
     when row_number() over (partition by dt.table_name order by dt.table_name) = 1 then dt.table_name 
     else null 
     end as table_name, 
     dt.column_name, 
     dt.data_type, 
     dt.data_length, 
     comm.comments 
FROM user_col_comments comm, user_tab_columns dt 
WHERE dt.table_name = comm.table_name 
    AND dt.column_name = comm.column_name 
ORDER BY dt.table_name, dt.column_id; 
+0

您的解決方案也很好,因爲似乎是獨立的DB供應商......謝謝! +1 – gavenkoa 2013-02-21 09:33:13