2012年2月29日星期三

直接以PL/SQL印出整潔的表格(table)架構

執行以下SQL指令:


SELECT
user_tab_columns.column_name Column_Name,
user_tab_columns.data_type Format,
NVL2(user_cons_columns.constraint_name, 'YES', '') Primary_Key,
CASE
  WHEN user_tab_columns.nullable='Y' THEN 'NO'
  WHEN user_tab_columns.nullable='N' THEN 'YES'
END Mandatory,
user_tab_columns.table_name
FROM user_cons_columns
LEFT JOIN user_constraints ON (user_cons_columns.constraint_name=user_constraints.constraint_name)
RIGHT OUTER JOIN user_tab_columns ON (user_cons_columns.table_name=user_tab_columns.table_name AND user_cons_columns.column_name=user_tab_columns.column_name AND user_constraints.constraint_type='P')
ORDER BY user_tab_columns.table_name, user_tab_columns.column_id;



若果使用SQL Developer更可以把結果直接儲存作.xls。




改良版(會把字符類別的長度列出)︰

SELECT
user_tab_columns.column_name Column_Name,
CASE
  WHEN user_tab_columns.data_type LIKE '%CHAR%' THEN user_tab_columns.data_type || '(' || user_tab_columns.char_length || ' CHAR)'
  ELSE user_tab_columns.data_type
END Format,
NVL2(user_cons_columns.constraint_name, 'YES', '') Primary_Key,
CASE
  WHEN user_tab_columns.nullable='Y' THEN 'NO'
  WHEN user_tab_columns.nullable='N' THEN 'YES'
END Mandatory,
user_tab_columns.table_name
FROM user_cons_columns
LEFT JOIN user_constraints ON (user_cons_columns.constraint_name=user_constraints.constraint_name)
RIGHT OUTER JOIN user_tab_columns ON (user_cons_columns.table_name=user_tab_columns.table_name AND user_cons_columns.column_name=user_tab_columns.column_name AND user_constraints.constraint_type='P')
ORDER BY user_tab_columns.table_name, user_tab_columns.column_id;

沒有留言:

發佈留言