Visualizza i nomi di tutti i vincoli per una tabella in Oracle SQL


115

Ho definito un nome per ciascuno dei vincoli per le tabelle multiple che ho creato in Oracle SQL.

Il problema è che per eliminare un vincolo per la colonna di una particolare tabella ho bisogno di conoscere il nome che ho fornito per ogni vincolo, che ho dimenticato.

Come faccio a elencare tutti i nomi dei vincoli che ho specificato per ogni colonna di una tabella?

C'è qualche istruzione SQL per farlo?

Risposte:


160

È necessario interrogare il dizionario dei dati , in particolare la USER_CONS_COLUMNSvista per vedere le colonne della tabella e i vincoli corrispondenti:

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

Cordiali saluti, a meno che tu non abbia creato specificatamente la tua tabella con un nome minuscolo (utilizzando virgolette doppie), il nome della tabella verrà impostato per impostazione predefinita in maiuscolo, quindi assicurati che sia così nella tua query.

Se poi desideri vedere più informazioni sul vincolo stesso, interroga la USER_CONSTRAINTSvista:

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

Se la tabella è contenuta in uno schema che non è il tuo schema predefinito, potresti dover sostituire le viste con:

all_cons_columns

e

all_constraints

aggiungendo alla clausola where:

   AND owner = '<schema owner of the table>'

Errore di battitura:USER_CONS_COLUMNS
Paul Draper,

3
<il nome della tua tabella> fa distinzione tra maiuscole e minuscole, credo; Dovrebbe essere in maiuscolo.
Kanagavelu Sugumar

Il ownercampo in (user | all | dba) _constraints e (user | all | dba) _cons_columns è il proprietario del vincolo, non il proprietario della tabella (secondo la documentazione Oracle). Il proprietario della tabella non è un campo disponibile in nessuna di queste viste. Ciò significa che il proprietario del vincolo e il proprietario della tabella devono essere lo stesso?
David Fletcher


11

forse questo può aiutare:

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

Saluti


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

nota: il nome della tabella deve essere in maiuscolo.

Se non conosci il nome del tavolo, allora

select constraint_name,constraint_type,table_name 
from user_constraints;

4

Spesso i database aziendali hanno diversi utenti e io non sono lontano da quello giusto:

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

Scelto dalla documentazione Oracle


0

Usa uno dei due comandi seguenti. Tutto deve essere in maiuscolo. Il nome della tabella deve essere racchiuso tra virgolette:

--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';
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.