如何在SqlPlus中关联user_constraints与user_cons_columns输出指定约束列?
Oracle 约束信息查询方案(跨字典表关联实现)
要获取你需要的约束字段,需关联Oracle的两个核心数据字典表:USER_CONSTRAINTS(存储约束基础信息)和USER_CONS_COLUMNS(存储约束关联的列及位置信息)。以下是SQLPlus中可直接执行的查询语句:
SET LINESIZE 200 SET PAGESIZE 100 SELECT uc.CONSTRAINT_NAME, uc.CONSTRAINT_TYPE, uc.TABLE_NAME, ucc.COLUMN_NAME, ucc.POSITION, uc.LAST_CHANGE FROM USER_CONSTRAINTS uc JOIN USER_CONS_COLUMNS ucc ON uc.OWNER = ucc.OWNER AND uc.CONSTRAINT_NAME = ucc.CONSTRAINT_NAME AND uc.TABLE_NAME = ucc.TABLE_NAME ORDER BY uc.TABLE_NAME, uc.CONSTRAINT_NAME, ucc.POSITION;
核心说明:
- 关联逻辑:通过
OWNER(所属用户)、CONSTRAINT_NAME(约束名)、TABLE_NAME(表名)三个字段关联,确保约束与对应列的映射准确无误。 - 字段来源:
CONSTRAINT_NAME、CONSTRAINT_TYPE、TABLE_NAME、LAST_CHANGE来自USER_CONSTRAINTS,其中CONSTRAINT_TYPE用单字符标识约束类型(P=主键,U=唯一约束,F=外键,C=检查约束)。COLUMN_NAME、POSITION来自USER_CONS_COLUMNS,POSITION用于标记复合约束(如复合主键)中列的顺序。
- 权限适配:若需查看其他用户的约束,将
USER_前缀替换为ALL_,并可添加WHERE uc.OWNER = '目标用户名'过滤;拥有DBA权限的话,可改用DBA_前缀的字典表。 - 格式优化:开头的
SET LINESIZE和SET PAGESIZE用于调整输出宽度和分页,避免字段换行或显示混乱。
内容的提问来源于stack exchange,提问作者Vivian Nong
相关产品推荐
相关产品推荐

