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?

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>'

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,


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


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;

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


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';
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.