select
user_tab_columns.table_name
,user_tab_comments.comments
,user_tab_columns.column_name
,user_col_comments.comments
,decode(user_pk.column_name, null, '', 'PK')
,user_tab_columns.data_type
,user_tab_columns.data_length
,user_tab_columns.data_precision
,user_tab_columns.data_scale
,user_tab_columns.nullable
from
user_tab_columns
,user_tab_comments
,user_col_comments
,(
select
user_ind_columns.table_name as table_name
,user_ind_columns.column_name as column_name
from
(select * from user_indexes where index_type = 'NORMAL' and uniqueness = 'UNIQUE') user_indexes
,user_ind_columns
where
user_indexes.index_name = user_ind_columns.index_name
) user_pk
where
user_tab_columns.table_name = user_tab_comments.table_name
and user_tab_columns.table_name = user_col_comments.table_name
and user_tab_columns.column_name = user_col_comments.column_name
and user_tab_columns.table_name = user_pk.table_name(+)
and user_tab_columns.column_name = user_pk.column_name(+)
order by
user_tab_columns.table_name
,user_tab_columns.column_id