Oracle数据库数据编程SQL<6.3 获取用户、表名、表中文描述、列名、列中文描述、主键标识等完整信息>
以下是一个综合查询,可以获取用户所有表的结构信息,包括表的中文描述、列的中文描述、主键标识、数据类型、是否为空、是否为日期类型以及列序号等信息:
目录
一、综合查询
使用说明
二、其他变体查询
1. 查询特定表的列信息
2. 查询所有表的基本信息和列数统计
一、综合查询
SELECT
t.owner AS "用户",
t.table_name AS "表名",
tc.comments AS "表中文描述",
c.column_name AS "列名",
cc.comments AS "列中文描述",
CASE WHEN pk.column_name IS NOT NULL THEN '是' ELSE '否' END AS "主键标识",
c.data_type AS "数据类型",
CASE
WHEN c.data_type IN ('DATE','TIMESTAMP','TIMESTAMP WITH TIME ZONE','TIMESTAMP WITH LOCAL TIME ZONE')
THEN '是'
ELSE '否'
END AS "是否日期",
c.nullable AS "是否为空",
c.column_id AS "列序号"
FROM
all_tables t
JOIN
all_tab_columns c ON t.owner = c.owner AND t.table_name = c.table_name
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
LEFT JOIN
all_tab_comments tc ON t.owner = tc.owner AND t.table_name = tc.table_name
LEFT JOIN (
SELECT
a.owner, a.table_name, a.column_name
FROM
all_cons_columns a
JOIN
all_constraints b ON a.owner = b.owner AND a.constraint_name = b.constraint_name
WHERE
b.constraint_type = 'P'
) pk ON c.owner = pk.owner AND c.table_name = pk.table_name AND c.column_name = pk.column_name
WHERE
t.owner = UPPER('&输入用户名') -- 替换为要查询的用户名,或删除此条件查询所有用户
ORDER BY
t.owner,
t.table_name,
c.column_id;
使用说明
- 替换用户名:将
&输入用户名
替换为您要查询的实际用户名,或者删除此条件查询所有用户 - 中文描述:
all_tab_comments
和all_col_comments
视图存储了表和列的注释信息(中文描述) - 主键标识:通过关联
all_constraints
和all_cons_columns
视图识别主键列 - 日期类型判断:通过检查
data_type
是否为日期相关类型来判断
二、其他变体查询
1. 查询特定表的列信息
SELECT
c.column_name AS "列名",
cc.comments AS "列中文描述",
c.data_type AS "数据类型",
CASE WHEN c.data_length > 0 THEN c.data_length
WHEN c.data_precision IS NOT NULL THEN c.data_precision
ELSE NULL END AS "长度/精度",
CASE WHEN c.data_scale IS NOT NULL THEN c.data_scale ELSE NULL END AS "小数位",
c.nullable AS "是否为空",
CASE WHEN pk.column_name IS NOT NULL THEN '是' ELSE '否' END AS "主键标识",
c.column_id AS "列序号"
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
LEFT JOIN (
SELECT
a.owner, a.table_name, a.column_name
FROM
all_cons_columns a
JOIN
all_constraints b ON a.owner = b.owner AND a.constraint_name = b.constraint_name
WHERE
b.constraint_type = 'P'
) pk ON c.owner = pk.owner AND c.table_name = pk.table_name AND c.column_name = pk.column_name
WHERE
c.owner = UPPER('&输入用户名')
AND c.table_name = UPPER('&输入表名')
ORDER BY
c.column_id;
2. 查询所有表的基本信息和列数统计
SELECT
t.owner AS "用户",
t.table_name AS "表名",
tc.comments AS "表中文描述",
COUNT(c.column_name) AS "列数",
t.last_analyzed AS "最后分析时间",
t.num_rows AS "行数估算"
FROM
all_tables t
JOIN
all_tab_columns c ON t.owner = c.owner AND t.table_name = c.table_name
LEFT JOIN
all_tab_comments tc ON t.owner = tc.owner AND t.table_name = tc.table_name
WHERE
t.owner = UPPER('&输入用户名')
GROUP BY
t.owner,
t.table_name,
tc.comments,
t.last_analyzed,
t.num_rows
ORDER BY
t.owner,
t.table_name;
这些查询可以帮助您全面了解Oracle数据库中表的结构和元数据信息,特别适合数据字典分析、数据建模和系统文档编写等场景。