web-dev-qa-db-fra.com

Oracle trouve une contrainte

J'ai une contrainte appelée users.SYS_C00381400. Comment puis-je trouver quelle est cette contrainte? Est-il possible d'interroger toutes les contraintes?

148
David Oneill
select * from all_constraints
where owner = '<NAME>'
and constraint_name = 'SYS_C00381400'
/

Comme toutes les vues du dictionnaire de données, il s'agit d'une vue USER_CONSTRAINTS si vous souhaitez uniquement vérifier votre schéma actuel et d'une vue DBA_CONSTRAINTS pour les utilisateurs d'administration.

La construction du nom de la 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 bien 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 le contrôle, 'P' pour le primaire.

En règle générale, il est conseillé 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 qui sera le cas si cette colonne n'est pas déjà indexée), elle utilisera le nom de contrainte ou le nom de l'index. Vous ne voulez pas d'une base de données contenant des index nommés comme SYS_C00935191.

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

240
APC

Pour obtenir une description plus détaillée (quelle table/colonne fait référence à 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 ici .

24
Thiago

peut-être que cela peut aider ..

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