Oracle SQL'de bir tablo için tüm kısıtlamaların adlarını görüntüleyin


115

Oracle SQL'de oluşturduğum birden çok tablo için kısıtlamaların her biri için bir ad tanımladım.

Sorun şu ki, belirli bir tablonun sütunu için bir kısıtlama bırakmak için her kısıtlama için sağladığım ve unuttuğum adı bilmem gerekiyor.

Bir tablonun her bir sütunu için belirlediğim tüm kısıtlamaların adlarını nasıl listeleyebilirim?

Bunu yapmak için herhangi bir SQL ifadesi var mı?

Yanıtlar:


160

Veri sözlüğünü , özellikle USER_CONS_COLUMNStablo sütunlarını ve karşılık gelen kısıtlamaları görmek için görünümü sorgulamanız gerekir :

SELECT *
  FROM user_cons_columns
 WHERE table_name = '<your table name>';

Bilginize, tablonuzu özellikle küçük harfli bir adla (çift tırnak kullanarak) oluşturmadıysanız, tablo adı varsayılan olarak büyük harfe ayarlanacaktır, bu nedenle sorgunuzda böyle olduğundan emin olun.

Daha sonra kısıtlamanın kendisi hakkında daha fazla bilgi görmek isterseniz, USER_CONSTRAINTSgörünümü sorgulayın :

SELECT *
  FROM user_constraints
 WHERE table_name = '<your table name>'
   AND constraint_name = '<your constraint name>';

Tablo, varsayılan şemanız olmayan bir şemada tutulursa, görünümleri aşağıdakilerle değiştirmeniz gerekebilir:

all_cons_columns

ve

all_constraints

where cümlesine ekleyerek:

   AND owner = '<schema owner of the table>'

Yazım hatası:USER_CONS_COLUMNS
Paul Draper

3
<tablo adınız> büyük / küçük harfe duyarlıdır, sanırım; Büyük harfle yazılmalıdır.
Kanagavelu Sugumar

ownerHer iki alan (kullanıcı | tüm | dba) _constraints ve (kullanıcı | tüm | dba) _cons_columns kısıtlama sahibi değil (Oracle belgelerine başına) tablonun sahibi. Tablo sahibi, bu görünümlerin hiçbirinde kullanılabilir bir alan değildir. Bu, kısıtlama sahibi ile tablo sahibinin aynı olması gerektiği anlamına mı gelir?
David Fletcher


11

belki bu yardımcı olabilir:

SELECT constraint_name, constraint_type, column_name
from user_constraints natural join user_cons_columns
where table_name = "my_table_name";

şerefe


8
select constraint_name,constraint_type 
from user_constraints
where table_name = 'YOUR TABLE NAME';

not: tablo adı büyük harfle yazılmalıdır.

Tablonun adını bilmiyorsanız o zaman,

select constraint_name,constraint_type,table_name 
from user_constraints;

4

Genellikle kurumsal veritabanlarının birkaç kullanıcısı vardır ve ben doğru olanı seçmiyorum:

SELECT * FROM ALL_CONSTRAINTS WHERE table_name = 'YOUR TABLE NAME' ;

Oracle belgelerinden seçildi


0

Aşağıdaki iki komuttan birini kullanın. Her şey büyük harf olmalı. Tablo adı tırnak işaretleri arasına alınmalıdır:

--SEE THE CONSTRAINTS ON A TABLE
SELECT COLUMN_NAME, CONSTRAINT_NAME FROM USER_CONS_COLUMNS WHERE TABLE_NAME = 'TBL_CUSTOMER';

--OR FOR LESS DETAIL
SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'TBL_CUSTOMER';
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.