Oracle znajduje ograniczenie

166

Mam ograniczenie o nazwie users.SYS_C00381400. Jak mogę dowiedzieć się, czym jest to ograniczenie? Czy istnieje sposób na sprawdzenie wszystkich ograniczeń?

David Oneill
źródło
jak poznać ograniczenie? users.SYS_C00381400
Vinay
Nazwa ograniczenia pojawiła się w komunikacie o błędzie.
David Oneill

Odpowiedzi:

268
select * from all_constraints
where owner = '<NAME>'
and constraint_name = 'SYS_C00381400'
/

Podobnie jak wszystkie widoki słownika danych, jest to widok USER_CONSTRAINTS, jeśli chcesz tylko sprawdzić bieżący schemat i widok DBA_CONSTRAINTS dla użytkowników administracyjnych.

Konstrukcja nazwy wiązania wskazuje nazwę wiązania wygenerowaną przez system. Na przykład, jeśli określimy NOT NULL w deklaracji tabeli. Lub rzeczywiście klucz podstawowy lub unikalny. Na przykład:

SQL> create table t23 (id number not null primary key)
  2  /

Table created.

SQL> select constraint_name, constraint_type
  2  from user_constraints
  3  where table_name = 'T23'
  4  /

CONSTRAINT_NAME                C
------------------------------ -
SYS_C00935190                  C
SYS_C00935191                  P

SQL>

'C'do sprawdzenia, 'P'dla podstawowego.

Ogólnie dobrym pomysłem jest nadanie więzom relacyjnym wyraźnej nazwy. Na przykład, jeśli baza danych utworzy indeks dla klucza podstawowego (co zrobi, jeśli ta kolumna nie jest jeszcze zindeksowana), użyje nazwy ograniczenia, a nazwa indeksu. Nie chcesz, aby baza danych była pełna indeksów o nazwach takich jak SYS_C00935191.

Szczerze mówiąc, większość ludzi nie zawraca sobie głowy nazywaniem ograniczeń NOT NULL.

APC
źródło
25

Aby uzyskać bardziej szczegółowy opis (która tabela / kolumna odwołuje się do której tabeli / kolumny), możesz uruchomić następujące zapytanie:

SELECT   uc.constraint_name||CHR(10)
   ||      '('||ucc1.TABLE_NAME||'.'||ucc1.column_name||')' constraint_source
   ,       'REFERENCES'||CHR(10)
   ||      '('||ucc2.TABLE_NAME||'.'||ucc2.column_name||')' references_column
FROM user_constraints uc ,
  user_cons_columns ucc1 ,
  user_cons_columns ucc2
WHERE uc.constraint_name = ucc1.constraint_name
AND uc.r_constraint_name = ucc2.constraint_name
AND ucc1.POSITION        = ucc2.POSITION -- Correction for multiple column primary keys.
AND uc.constraint_type   = 'R'
AND uc.constraint_name   = 'SYS_C00381400'
ORDER BY ucc1.TABLE_NAME ,
  uc.constraint_name;

Od tutaj .

Thiago
źródło
6

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";
van Gogh
źródło