如何獲得Oracle數據庫中相應列的唯一約束名?在oracle數據庫中按列名得到約束名稱
換句話說我想通過列名得到約束名。對於這個問題
僞查詢:
select constraint_name from table_name tname where tname.column_name = 'columnName';
這可能嗎?
如何獲得Oracle數據庫中相應列的唯一約束名?在oracle數據庫中按列名得到約束名稱
換句話說我想通過列名得到約束名。對於這個問題
僞查詢:
select constraint_name from table_name tname where tname.column_name = 'columnName';
這可能嗎?
使用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
試試這個。
select CONSTRAINT_NAME from USER_CONS_COLUMNS
where table_name='YOUR_TABLE'
and column_name='YOUR_COLUMN'
這將獲得列的所有約束 - 而不僅僅是'UNIQUE'約束。 – MT0
非常感謝,但正如我所說,我想獲得唯一的'唯一'約束名稱, –
幾乎是[如何獲取系統生成的檢查約束在oracle中的表列的名稱](http:// stack overflow.com/q/34932419/1509264),但是隻有獲得'UNIQUE'約束的附加限制。 – MT0