2017-04-09 111 views
0

如何獲得Oracle數據庫中相應列的唯一約束名?在oracle數據庫中按列名得到約束名稱

換句話說我想通過列名得到約束名。對於這個問題

僞查詢:

select constraint_name from table_name tname where tname.column_name = 'columnName'; 

這可能嗎?

+0

幾乎是[如何獲取系統生成的檢查約束在oracle中的表列的名稱](http:// stack overflow.com/q/34932419/1509264),但是隻有獲得'UNIQUE'約束的附加限制。 – MT0

回答

2

使用Oracle數據字典視圖ALL_CONS_COLUMNSUSER_CONS_COLUMNS(如果要通過列類型來限制它 - 即唯一或主鍵約束 - 那麼您可以在ALL_CONSTRAINTSUSER_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 
3

試試這個。

select CONSTRAINT_NAME from USER_CONS_COLUMNS 
where table_name='YOUR_TABLE' 
and column_name='YOUR_COLUMN' 
+0

這將獲得列的所有約束 - 而不僅僅是'UNIQUE'約束。 – MT0

+0

非常感謝,但正如我所說,我想獲得唯一的'唯一'約束名稱, –