Oracle findet eine Einschränkung

166

Ich habe eine Einschränkung namens users.SYS_C00381400. Wie finde ich diese Einschränkung? Gibt es eine Möglichkeit, alle Einschränkungen abzufragen?

David Oneill
quelle
Woher weiß man Einschränkungen? users.SYS_C00381400
Vinay
Der Einschränkungsname wurde in einer Fehlermeldung angezeigt.
David Oneill

Antworten:

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

Wie alle Datenwörterbuchansichten ist dies eine USER_CONSTRAINTS-Ansicht, wenn Sie nur Ihr aktuelles Schema überprüfen möchten, und eine DBA_CONSTRAINTS-Ansicht für Administrationsbenutzer.

Die Konstruktion des Einschränkungsnamens gibt einen vom System generierten Einschränkungsnamen an. Zum Beispiel, wenn wir in einer Tabellendeklaration NOT NULL angeben. Oder in der Tat ein Primär- oder eindeutiger Schlüssel. Beispielsweise:

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'zur Kontrolle, 'P'für die Grundschule.

Im Allgemeinen ist es eine gute Idee, relationalen Einschränkungen einen expliziten Namen zu geben. Wenn die Datenbank beispielsweise einen Index für den Primärschlüssel erstellt (was der Fall ist, wenn diese Spalte noch nicht indiziert ist), wird der Einschränkungsname oder der Name des Index verwendet. Sie möchten keine Datenbank voller Indizes mit dem Namen wie SYS_C00935191.

Um ehrlich zu sein, machen sich die meisten Leute nicht die Mühe, NOT NULL-Einschränkungen zu benennen.

APC
quelle
25

Um eine detailliertere Beschreibung zu erhalten (welche Tabelle / Spalte auf welche Tabelle / Spalte verweist), können Sie die folgende Abfrage ausführen:

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;

Von hier aus .

Thiago
quelle
6

Vielleicht kann das helfen ..

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