2017-04-09 8 views
0

oracleデータベースの対応する列の唯一のconstraint_nameの取得方法は?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

オラクル・ディクショナリ・ビューを使用しALL_CONS_COLUMNSUSER_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 
3

これを試してください。

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

これは、 'UNIQUE'制約だけでなく、列に対するすべての制約を取得します。 – MT0

+0

ありがとう、私が言うように、私は唯一の "一意の"制約名を取得したい、 –

関連する問題