開發、文檔產生、影響分析常需取得:某 Schema 擁有哪些表、每張表有哪些欄位、欄位註解為何。本文彙整 USER_*、ALL_* 視圖的高頻查詢組合,可直接套用。
-- 當前使用者
SELECT table_name, table_type, comments
FROM user_tab_comments
WHERE table_type IN ('TABLE','VIEW')
ORDER BY table_name;
-- 所有可存取使用者 (需權限)
SELECT owner, table_name, table_type, comments
FROM all_tab_comments
ORDER BY owner, table_name;
-- 當前使用者:欄位資料型別、長度、精度、可空、預設值、註解
SELECT c.table_name, c.column_name, c.data_type, c.data_length,
c.data_precision, c.data_scale, c.nullable, c.data_default,
cc.comments
FROM user_tab_columns c
LEFT JOIN user_col_comments cc
ON c.table_name = cc.table_name
AND c.column_name = cc.column_name
ORDER BY c.table_name, c.column_id;
-- 所有可存取使用者
SELECT c.owner, c.table_name, c.column_name, c.data_type, c.data_length,
c.data_precision, c.data_scale, c.nullable, c.data_default,
cc.comments
FROM all_tab_columns c
LEFT JOIN all_col_comments cc
ON c.owner = cc.owner
AND c.table_name = cc.table_name
AND c.column_name = cc.column_name
ORDER BY c.owner, c.table_name, c.column_id;
SELECT t.table_name, t.comments AS table_comment,
c.column_name, c.data_type ||
CASE WHEN c.data_precision IS NOT NULL
THEN '('||c.data_precision||','||c.data_scale||')'
WHEN c.data_length IS NOT NULL
THEN '('||c.data_length||')' END AS data_type_full,
c.nullable, c.data_default, cc.comments AS column_comment
FROM user_tab_comments t
JOIN user_tab_columns c ON t.table_name = c.table_name
LEFT JOIN user_col_comments cc
ON c.table_name = cc.table_name
AND c.column_name = cc.column_name
WHERE t.table_type = 'TABLE'
ORDER BY t.table_name, c.column_id;
SELECT '## ' || table_name || ' - ' || NVL(table_comment, '無說明') AS md_header
FROM user_tab_comments
WHERE table_type = 'TABLE'
UNION ALL
SELECT '| ' || column_name || ' | ' || data_type_full || ' | ' ||
DECODE(nullable,'Y','可空','N','非空') || ' | ' ||
NVL(data_default,'') || ' | ' || NVL(column_comment,'') || ' |'
FROM (
SELECT c.table_name, c.column_name, c.data_type, c.data_length,
c.data_precision, c.data_scale, c.nullable, c.data_default,
cc.comments AS column_comment,
c.data_type ||
CASE WHEN c.data_precision IS NOT NULL
THEN '('||c.data_precision||','||c.data_scale||')'
WHEN c.data_length IS NOT NULL
THEN '('||c.data_length||')' END AS data_type_full
FROM user_tab_columns c
LEFT JOIN user_col_comments cc
ON c.table_name = cc.table_name
AND c.column_name = cc.column_name
)
ORDER BY table_name, column_id;
| 視圖前綴 | 範圍 | 需求權限 |
|---|---|---|
| USER_ | 當前 Schema 擁有 | 無 (CONNECT 即可) |
| ALL_ | 當前 Schema 可存取 (含他人授權) | 無 |
| DBA_ | 全資料庫所有物件 | DBA / SELECT_CATALOG_ROLE |