这个脚本转储带有Oracle列和注释的表(我做的是:以人类可读的格式转储模式DDL而不依赖于任何外部工具,只需sqlplus
,我想将此脚本提交给SVN,所以任何团队会员可以使用它):
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 ...
有什么建议吗?
答案 0 :(得分:4)
使用SQL * Plus生成报告时,可以使用BREAK ON columnname
来抑制查询结果中的重复项。
答案 1 :(得分: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;