oracle数据库中通过列名获取约束名
Posted
技术标签:
【中文标题】oracle数据库中通过列名获取约束名【英文标题】:get constraint name by column name in oracle database 【发布时间】:2017-04-09 07:15:13 【问题描述】:如何获取oracle数据库中对应列的唯一constraint_name?
换句话说,我想通过列名获取约束名。
此问题的伪查询:
select constraint_name from table_name tname where tname.column_name = 'columnName';
这可能吗?
【问题讨论】:
几乎是How to fetch the system generated check constraint name of table column in oracle 的副本,但增加了只能获取UNIQUE
约束的限制。
【参考方案1】:
使用 Oracle 字典视图 ALL_CONS_COLUMNS
或 USER_CONS_COLUMNS
(如果您想按列类型限制它 - 即唯一或主键约束 - 那么您可以加入 ALL_CONSTRAINTS
或 USER_CONSTRAINTS
):
SELECT acc.constraint_name
FROM ALL_CONS_COLUMNS acc
INNER JOIN ALL_CONSTRAINTS ac
ON ( acc.CONSTRAINT_NAME = ac.CONSTRAINT_NAME )
WHERE ac.OWNER = 'YOUR_SCHEMA_NAME'
AND ac.TABLE_NAME = 'YOUR_TABLE_NAME'
AND acc.COLUMN_NAME = 'YOUR_COLUMN_NAME'
AND ac.CONSTRAINT_TYPE IN ( 'U', 'P' ) -- Unique or primary key constraints
或:
SELECT ucc.constraint_name
FROM USER_CONS_COLUMNS ucc
INNER JOIN ALL_CONSTRAINTS uc
ON ( ucc.CONSTRAINT_NAME = uc.CONSTRAINT_NAME )
WHERE uc.OWNER = 'YOUR_SCHEMA_NAME'
AND uc.TABLE_NAME = 'YOUR_TABLE_NAME'
AND ucc.COLUMN_NAME = 'YOUR_COLUMN_NAME'
AND uc.CONSTRAINT_TYPE IN ( 'U', 'P' ) -- Unique or primary key constraints
【讨论】:
【参考方案2】:试试这个。
select CONSTRAINT_NAME from USER_CONS_COLUMNS
where table_name='YOUR_TABLE'
and column_name='YOUR_COLUMN'
【讨论】:
这将获得列的所有约束——不仅仅是UNIQUE
约束。
非常感谢,但正如我所说,我想获得唯一的“唯一”约束名称,以上是关于oracle数据库中通过列名获取约束名的主要内容,如果未能解决你的问题,请参考以下文章