Wyświetl nazwy wszystkich ograniczeń dla tabeli w Oracle SQL

115

Zdefiniowałem nazwę dla każdego ograniczenia dla wielu tabel, które utworzyłem w Oracle SQL.

Problem polega na tym, że aby usunąć ograniczenie dla kolumny określonej tabeli, muszę znać nazwę, którą podałem dla każdego ograniczenia, o której zapomniałem.

Jak wyświetlić listę wszystkich nazw ograniczeń, które określiłem dla każdej kolumny tabeli?

Czy jest do tego instrukcja SQL?

Jeris Alan
źródło

Odpowiedzi:

160

Musisz zapytać słownik danych , a konkretnie USER_CONS_COLUMNSwidok, aby zobaczyć kolumny tabeli i odpowiednie ograniczenia:

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

Do Twojej wiadomości, chyba że specjalnie utworzyłeś swoją tabelę z nazwą małej litery (używając podwójnych cudzysłowów), wtedy nazwa tabeli zostanie domyślnie ustawiona na dużą, więc upewnij się, że tak jest w zapytaniu.

Jeśli chcesz zobaczyć więcej informacji o samym ograniczeniu, wyślij zapytanie do USER_CONSTRAINTSwidoku:

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

Jeśli tabela jest przechowywana w schemacie, który nie jest schematem domyślnym, może być konieczne zastąpienie widoków:

all_cons_columns

i

all_constraints

dodanie do klauzuli where:

   AND owner = '<schema owner of the table>'
Ollie
źródło
Literówka:USER_CONS_COLUMNS
Paul Draper,
3
Myślę, że <nazwa twojej tabeli> rozróżnia wielkość liter; Powinien być pisany wielkimi literami.
Kanagavelu Sugumar
ownerPola w obu (wszystkich użytkowników | | dba) _constraints i (użytkownik | wszystko | dba) _cons_columns jest właściciel przymusu, a nie właściciel tabeli (za dokumentacji Oracle). Właściciel tabeli nie jest dostępnym polem w żadnym z tych widoków. Czy to oznacza, że ​​właściciel ograniczenia i właściciel tabeli muszą być tacy sami?
David Fletcher,
14
SELECT * FROM USER_CONSTRAINTS
Paciv
źródło
2
To nie da ci nazwy kolumny
Jasper de Vries
Użyj all_constraints
Sandip Nirmal
11

może to pomoże:

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

Twoje zdrowie

van Gogh
źródło
8
select constraint_name,constraint_type 
from user_constraints
where table_name = 'YOUR TABLE NAME';

uwaga: nazwa tabeli powinna być zapisana wielkimi literami.

Jeśli nie znasz nazwy tabeli,

select constraint_name,constraint_type,table_name 
from user_constraints;
kapil kumar
źródło
4

Często korporacyjne bazy danych mają kilku użytkowników i nie jestem na właściwym miejscu:

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

Pobrane z dokumentacji Oracle

Gweltaz Niquel
źródło
0

Użyj jednego z dwóch poniższych poleceń. Wszystko musi być zapisane wielkimi literami. Nazwa tabeli musi być ujęta w cudzysłów:

--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';
Raymond Wachaga
źródło