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
相关产品推荐
相关产品推荐

