Mam ograniczenie o nazwie users.SYS_C00381400
. Jak mogę dowiedzieć się, czym jest to ograniczenie? Czy istnieje sposób na sprawdzenie wszystkich ograniczeń?
Mam ograniczenie o nazwie users.SYS_C00381400
. Jak mogę dowiedzieć się, czym jest to ograniczenie? Czy istnieje sposób na sprawdzenie wszystkich ograniczeń?
Odpowiedzi:
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.
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 .