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?

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>'

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


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


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;


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';
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.