Anzeigen der Namen aller Einschränkungen für eine Tabelle in Oracle SQL

115

Ich habe für jede Einschränkung einen Namen für die mehreren Tabellen definiert, die ich in Oracle SQL erstellt habe.

Das Problem ist, dass ich zum Löschen einer Einschränkung für die Spalte einer bestimmten Tabelle den Namen kennen muss, den ich für jede Einschränkung angegeben habe, die ich vergessen habe.

Wie liste ich alle Namen von Einschränkungen auf, die ich für jede Spalte einer Tabelle angegeben habe?

Gibt es dafür eine SQL-Anweisung?

Jeris Alan
quelle

Antworten:

160

Sie müssen das Datenwörterbuch abfragen , insbesondere die USER_CONS_COLUMNSAnsicht, um die Tabellenspalten und die entsprechenden Einschränkungen anzuzeigen:

SELECT *
  FROM user_cons_columns
 WHERE table_name = '<your table name>';

Zu Ihrer Information: Wenn Sie Ihre Tabelle nicht speziell mit einem Kleinbuchstaben (in doppelten Anführungszeichen) erstellt haben, wird der Tabellenname standardmäßig in Großbuchstaben geschrieben. Stellen Sie daher sicher, dass dies in Ihrer Abfrage der Fall ist.

Wenn Sie dann weitere Informationen zur Einschränkung selbst USER_CONSTRAINTSanzeigen möchten, fragen Sie die Ansicht ab:

SELECT *
  FROM user_constraints
 WHERE table_name = '<your table name>'
   AND constraint_name = '<your constraint name>';

Wenn die Tabelle in einem Schema gespeichert ist, das nicht Ihr Standardschema ist, müssen Sie möglicherweise die Ansichten durch Folgendes ersetzen:

all_cons_columns

und

all_constraints

Hinzufügen zur where-Klausel:

   AND owner = '<schema owner of the table>'
Ollie
quelle
Tippfehler:USER_CONS_COLUMNS
Paul Draper
3
<Ihr Tabellenname> unterscheidet zwischen Groß- und Kleinschreibung, denke ich. Es sollte in Großbuchstaben sein.
Kanagavelu Sugumar
Das ownerFeld in den Spalten (user | all | dba) _constraints und (user | all | dba) _cons_columns ist der Eigentümer der Einschränkung und nicht der Eigentümer der Tabelle (gemäß Oracle-Dokumentation). Der Tabellenbesitzer ist in keiner dieser Ansichten ein verfügbares Feld. Bedeutet dies, dass der Einschränkungseigentümer und der Tabellenbesitzer identisch sein müssen?
David Fletcher
14
SELECT * FROM USER_CONSTRAINTS
Paciv
quelle
2
Dies wird Ihnen nicht den Spaltennamen geben
Jasper de Vries
Verwenden Sie all_constraints
Sandip Nirmal
11

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

Prost

Van Gogh
quelle
8
select constraint_name,constraint_type 
from user_constraints
where table_name = 'YOUR TABLE NAME';

Hinweis: Der Tabellenname sollte in Großbuchstaben angegeben werden.

Falls Sie den Namen der Tabelle dann nicht kennen,

select constraint_name,constraint_type,table_name 
from user_constraints;
kapil kumar
quelle
4

Oft haben Unternehmensdatenbanken mehrere Benutzer, und ich bin nicht immer auf dem richtigen Weg:

SELECT * FROM ALL_CONSTRAINTS WHERE table_name = 'YOUR TABLE NAME' ;

Aus der Oracle-Dokumentation ausgewählt

Gweltaz Niquel
quelle
0

Verwenden Sie einen der beiden folgenden Befehle. Alles muss in Großbuchstaben geschrieben sein. Der Tabellenname muss in Anführungszeichen gesetzt werden:

--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';
Raymond Wachaga
quelle