Oracle 查看所有表的字段名、数据类型及长度

1.只查看某个特定表的字段名
复制代码
SELECT column_name, data_type, data_length
FROM user_tab_columns
WHERE table_name = '你的表名' -- 注意大写
ORDER BY column_id;
2.查看当前用户下所有表的字段名
复制代码
SELECT table_name, column_name, data_type, data_length
FROM user_tab_columns
ORDER BY table_name, column_id;

说明:

table_name: 表名

column_name: 字段名

data_type: 数据类型(如 VARCHAR2, NUMBER)

data_length: 数据长度

若需要格式化字段展示,可使用如下SQL:

复制代码
SELECT table_name || '.' || column_name AS full_column_name,
       data_type || '(' || data_length || ')' AS data_type_length
FROM user_tab_columns
ORDER BY table_name, column_id;
3.查看所有用户的表字段名(你有权限访问的)
复制代码
SELECT owner, table_name, column_name, data_type, data_length
FROM all_tab_columns
ORDER BY owner, table_name, column_id;
4.查看数据库中所有表的字段名(需要 DBA 权限)
复制代码
SELECT owner, table_name, column_name, data_type, data_length
FROM dba_tab_columns
ORDER BY owner, table_name, column_id;
5.查看当前用户下字段名、数据类型及长度
复制代码
SELECT 
    table_name,
    column_name,
    
    -- 格式化数据类型 + 长度/精度
    CASE 
        WHEN data_type IN ('CHAR', 'VARCHAR2', 'NCHAR', 'NVARCHAR2') THEN 
            data_type || '(' || 
            CASE char_used 
                WHEN 'C' THEN char_length || ' CHAR'
                WHEN 'B' THEN data_length || ' BYTE'
            END || ')'
        WHEN data_type = 'NUMBER' THEN 
            CASE 
                WHEN data_precision IS NULL THEN 'NUMBER' 
                WHEN data_scale = 0 THEN 'NUMBER(' || data_precision || ')' 
                ELSE 'NUMBER(' || data_precision || ',' || data_scale || ')'
            END
        ELSE 
            data_type
    END AS formatted_data_type,

    -- 实际存储长度(以字节为单位)
    data_length AS actual_length_bytes

FROM 
    user_tab_columns
ORDER BY 
    table_name, column_id;

若需格式化显示字段长度,可使用如下SQL:

复制代码
SELECT 
    table_name,
    column_name,
    
    -- 格式化数据类型(去掉 BYTE/CHAR)
    CASE 
        WHEN data_type IN ('CHAR', 'VARCHAR2', 'NCHAR', 'NVARCHAR2') THEN 
            data_type || '(' || 
            CASE char_used 
                WHEN 'C' THEN char_length
                WHEN 'B' THEN data_length
            END || ')'
        WHEN data_type = 'NUMBER' THEN 
            CASE 
                WHEN data_precision IS NULL THEN 'NUMBER' 
                WHEN data_scale = 0 THEN 'NUMBER(' || data_precision || ')' 
                ELSE 'NUMBER(' || data_precision || ',' || data_scale || ')'
            END
        ELSE 
            data_type
    END AS formatted_data_type,

    -- 实际字节长度(定义层面上的)
    data_length AS actual_length_bytes

FROM 
    user_tab_columns
ORDER BY 
    table_name, column_id;
6.查询前用户下所有表的字段名称、字段长度、是否允许为空
复制代码
SELECT 
    table_name,
    column_name,
    data_type,
    CASE 
        WHEN data_type IN ('CHAR', 'VARCHAR2', 'NCHAR', 'NVARCHAR2') THEN
            char_length
        WHEN data_type = 'NUMBER' THEN
            data_precision
        ELSE
            data_length
    END AS length,
    CASE 
        WHEN nullable = 'Y' THEN '是'
        ELSE '否'
    END AS is_nullable
FROM 
    user_tab_columns
ORDER BY 
    table_name, column_id;

若需格式化显示长度,可使用如下SQL:

复制代码
SELECT 
    table_name,
    column_name,
    CASE 
        WHEN data_type IN ('CHAR', 'VARCHAR2', 'NCHAR', 'NVARCHAR2') THEN 
            data_type || '(' || 
                CASE char_used 
                    WHEN 'C' THEN char_length 
                    WHEN 'B' THEN data_length 
                    ELSE data_length 
                END || ')'
        WHEN data_type = 'NUMBER' THEN 
            CASE 
                WHEN data_precision IS NULL THEN 'NUMBER'
                WHEN data_scale = 0 THEN 'NUMBER(' || data_precision || ')'
                ELSE 'NUMBER(' || data_precision || ',' || data_scale || ')'
            END
        ELSE data_type
    END AS data_type_length,
    CASE 
        WHEN nullable = 'Y' THEN '是'
        ELSE '否'
    END AS is_nullable
FROM 
    user_tab_columns
ORDER BY 
    table_name, column_id;