198 Stimmen

Oracle findet eine Einschränkung

Ich habe eine Einschränkung namens users.SYS_C00381400 . Wie kann ich herausfinden, was diese Einschränkung ist? Gibt es eine Möglichkeit, alle Beschränkungen abzufragen?

338voto

APC Punkte 140727
select * from all_constraints
where owner = '<NAME>'
and constraint_name = 'SYS_C00381400'
/

Wie alle Data-Dictionary-Ansichten ist dies eine USER_CONSTRAINTS-Ansicht, wenn Sie nur Ihr aktuelles Schema überprüfen wollen, und eine DBA_CONSTRAINTS-Ansicht für Verwaltungsbenutzer.

Die Konstruktion des Constraint-Namens weist auf einen vom System generierten Constraint-Namen hin. Zum Beispiel, wenn wir NOT NULL in einer Tabellendeklaration angeben. Oder auch ein Primär- oder eindeutiger Schlüssel. Zum Beispiel:

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 das Primäre.

Im Allgemeinen ist es eine gute Idee, relationalen Beschränkungen einen eindeutigen Namen zu geben. Wenn die Datenbank beispielsweise einen Index für den Primärschlüssel erstellt (was sie tun wird, wenn diese Spalte nicht bereits indiziert ist), wird sie den Namen der Einschränkung verwenden, um den Index zu benennen. Sie wollen nicht, dass eine Datenbank voller Indizes mit Namen wie SYS_C00935191 .

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

31voto

Thiago Punkte 863

Um eine genauere Beschreibung zu erhalten (welche Tabelle/Spalte verweist auf welche Tabelle/Spalte), 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;

から aquí .

8voto

Van Gogh Punkte 445

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";

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X