2010-01-19 5 views
127

J'ai une contrainte appelée users.SYS_C00381400. Comment puis-je trouver quelle est cette contrainte? Existe-t-il un moyen d'interroger toutes les contraintes?Oracle trouver une contrainte

+0

comment savoir la contrainte? users.SYS_C00381400 – Vinay

+0

Le nom de la contrainte apparaissait dans un message d'erreur. –

Répondre

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

Comme toutes les données vues du dictionnaire, ce USER_CONSTRAINTS une vue si vous voulez simplement vérifier votre schéma actuel et une vue DBA_CONSTRAINTS pour les utilisateurs d'administration.

La construction du nom de contrainte indique un nom de contrainte généré par le système. Par exemple, si nous spécifions NOT NULL dans une déclaration de table. Ou en effet une clé primaire ou unique. Par exemple:

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' pour l'enregistrement, 'P' pour le primaire.

Généralement, c'est une bonne idée de donner un nom explicite aux contraintes relationnelles. Par exemple, si la base de données crée un index pour la clé primaire (ce qu'elle fera si cette colonne n'est pas déjà indexée), elle utilisera le nom de la contrainte o nommez l'index. Vous ne voulez pas une base de données pleine d'index nommés SYS_C00935191.

La plupart des gens ne prennent pas la peine de nommer les contraintes NOT NULL.

19

Pour obtenir une description plus détaillée (dont les références de table/colonne quelle table/colonne) vous pouvez exécuter la requête suivante:

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; 

De here.

4

cela peut peut-être aider ..

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