You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle中如何列出表所有列及对应主键约束名称

Oracle 查询表所有列并标注主键约束名

直接使用左连接关联列信息表和主键约束关联表,确保所有列都被返回,主键列显示对应约束名,非主键列显示NULL:

SELECT 
    tc.column_name,
    cc.constraint_name
FROM 
    DBA_TAB_COLS tc
LEFT JOIN (
    -- 先筛选出目标表的主键约束关联列
    SELECT 
        col.table_name,
        col.column_name,
        con.constraint_name
    FROM 
        DBA_CONSTRAINTS con
    INNER JOIN 
        DBA_CONS_COLUMNS col
        ON con.constraint_name = col.constraint_name
    WHERE 
        con.constraint_type = 'P' -- 只取主键约束
        AND con.owner = 'YOUR_SCHEMA' -- 替换为你的用户名/ schema
        AND col.table_name = 'TARGET_TABLE' -- 替换为目标表名
) cc
ON tc.owner = 'YOUR_SCHEMA'
AND tc.table_name = 'TARGET_TABLE'
AND tc.column_name = cc.column_name
WHERE 
    tc.owner = 'YOUR_SCHEMA'
    AND tc.table_name = 'TARGET_TABLE'
ORDER BY 
    tc.column_id; -- 按表中列的顺序排序

关键说明

  • 使用LEFT JOIN保证DBA_TAB_COLS中的所有列都被保留,即使没有匹配的主键约束(此时constraint_name为NULL)
  • 子查询提前过滤主键约束数据,减少连接运算的冗余,提升效率
  • 替换参数:将YOUR_SCHEMA和TARGET_TABLE替换为实际的用户名和表名(Oracle对象名默认大写,注意大小写匹配)
  • 权限不足时,将所有DBA_*视图替换为ALL_*视图(可查看当前用户有权限的表),或USER_*视图(仅查看当前用户的表,无需指定owner条件)

内容的提问来源于stack exchange,提问作者Jay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:45:28