Oracle trova un vincolo


166

Ho un vincolo chiamato users.SYS_C00381400. Come trovo quel vincolo? C'è un modo per interrogare tutti i vincoli?


come sapere vincolo? users.SYS_C00381400
Vinay

Il nome del vincolo è stato visualizzato in un messaggio di errore.
David Oneill,

Risposte:


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

Come tutte le viste del dizionario dei dati, questa è una vista USER_CONSTRAINTS se si desidera solo controllare lo schema corrente e una vista DBA_CONSTRAINTS per gli utenti amministratori.

La costruzione del nome del vincolo indica un nome di vincolo generato dal sistema. Ad esempio, se si specifica NOT NULL in una dichiarazione di tabella. O davvero una chiave primaria o unica. Per esempio:

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'per controllo, 'P'per primario.

Generalmente è una buona idea dare un nome esplicito ai vincoli relazionali. Ad esempio, se il database crea un indice per la chiave primaria (cosa che farà se quella colonna non è già indicizzata) utilizzerà il nome del vincolo o il nome dell'indice. Non vuoi un database pieno di indici chiamato like SYS_C00935191.

Ad essere sinceri, la maggior parte delle persone non si preoccupa di nominare vincoli NOT NULL.


26

Per ottenere una descrizione più dettagliata (quale tabella / colonna fa riferimento a quale tabella / colonna) è possibile eseguire la seguente query:

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;

Da qui .


6

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