Afficher les noms de toutes les contraintes d'une table dans Oracle SQL


115

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, j'ai besoin de connaître le nom que j'ai fourni pour chaque contrainte, ce que j'ai oublié.

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

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

Réponses:


160

Vous devez interroger le dictionnaire de données , en particulier la USER_CONS_COLUMNSvue pour voir les colonnes de la table et les contraintes correspondantes:

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

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

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

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

Si la table est contenue 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

ajout à la clause where:

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

Typo:USER_CONS_COLUMNS
Paul Draper

3
<le nom de votre table> est sensible à la casse, je pense; Il doit être en majuscules.
Kanagavelu Sugumar

Le ownerchamp dans (user | all | dba) _constraints et (user | all | dba) _cons_columns est le propriétaire de la contrainte, pas le propriétaire de la table (selon la documentation Oracle). Le propriétaire de la table n'est un champ disponible dans aucune de ces vues. Cela signifie-t-il que le propriétaire de la contrainte et le propriétaire de la table doivent être identiques?
David Fletcher


11

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

à votre santé


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

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

Si vous ne connaissez pas le nom de la table,

select constraint_name,constraint_type,table_name 
from user_constraints;

4

Les bases de données d'entreprise ont souvent plusieurs utilisateurs et je ne suis pas toujours sur le bon:

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

Tiré de la documentation Oracle


0

Utilisez l'une des deux commandes ci-dessous. Tout doit être en majuscules. Le nom de la table doit être placé entre guillemets:

--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';
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.