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;

使用说明

  1. 替换用户名:将 &输入用户名 替换为您要查询的实际用户名,或者删除此条件查询所有用户
  2. 中文描述all_tab_comments 和 all_col_comments 视图存储了表和列的注释信息(中文描述)
  3. 主键标识:通过关联 all_constraints 和 all_cons_columns 视图识别主键列
  4. 日期类型判断:通过检查 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数据库中表的结构和元数据信息,特别适合数据字典分析、数据建模和系统文档编写等场景。

你可能感兴趣的:(数据库,oracle,sql)