137 votes

Afficher les noms de toutes les contraintes pour une table dans Oracle SQL

J'ai défini un nom pour chacune des contraintes pour les multiples tables que j'ai créées dans Oracle SQL.

Le problème est que pour supprimer une contrainte pour la colonne d'une table particulière, je dois connaître le nom que j'ai fourni pour chaque contrainte, que j'ai oublié.

Comment lister tous les noms des contraintes que j'ai spécifiées pour chaque colonne d'une table ?

Existe-t-il une instruction SQL pour le faire ?

193voto

Ollie Points 8526

Vous devez interroger le dictionnaire de données et plus particulièrement le USER_CONS_COLUMNS pour voir les colonnes de la table et les contraintes correspondantes :

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

Pour votre information, à moins que vous n'ayez spécifiquement créé votre table avec un nom en minuscules (en utilisant des guillemets), le nom de la table sera par défaut en majuscules, alors assurez-vous qu'il en soit ainsi dans votre requête.

Si vous souhaitez ensuite voir plus d'informations sur la contrainte elle-même, interrogez la rubrique USER_CONSTRAINTS vue :

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

Si la table se trouve dans un schéma qui n'est pas votre schéma par défaut, vous devrez peut-être remplacer les vues par :

all_cons_columns

et

all_constraints

en ajoutant à la clause where :

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

0 votes

Une erreur de frappe : USER_CONS_COLUMNS

3 votes

<votre nom de table> est sensible à la casse, je pense ; Il doit être en majuscule.

1 votes

Le site owner dans (user|all|dba)_constraints et (user|all|dba)_cons_columns est le propriétaire de la contrainte, et non le propriétaire de la table (selon la documentation Oracle). Le propriétaire de la table n'est pas un champ disponible dans l'une ou l'autre de ces vues. Cela signifie-t-il que le propriétaire de la contrainte et le propriétaire de la table doivent être les mêmes ?

18voto

Paciv Points 1008
SELECT * FROM USER_CONSTRAINTS

3 votes

Cela ne vous donnera pas le nom de la colonne

0 votes

Utiliser toutes les contraintes

14voto

Van Gogh Points 67

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

salutations

9voto

kapil kumar Points 21
select constraint_name,constraint_type 
from user_constraints
where table_name = 'YOUR TABLE NAME';

note : le nom de la table doit être en majuscules.

Au cas où vous ne connaîtriez pas le nom de la table alors,

select constraint_name,constraint_type,table_name 
from user_constraints;

1voto

kashif Points 989
use mydatabase
go
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where TABLE_NAME = 'mytalbe'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X