web-dev-qa-db-fra.com

Noms d'affichage 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, ce que j'ai oublié. 

Comment répertorier tous les noms de contraintes que j'ai spécifiés pour chaque colonne d'un tableau? 

Y at-il une instruction SQL pour le faire? 

94
Jeris Alan

Vous devez interroger le data dictionary , en particulier la vue USER_CONS_COLUMNS pour afficher les colonnes du tableau 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 minuscule (en utilisant des guillemets), le nom de la table sera mis en majuscule afin de vous assurer 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 vue USER_CONSTRAINTS:

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

Si la table est conservée 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

ajouter à la clause where:

   AND owner = '<schema owner of the table>'
132
Ollie
SELECT * FROM USER_CONSTRAINTS
12
Paciv

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
Van Gogh
select constraint_name,constraint_type 
from user_constraints
where table_name = 'YOUR TABLE NAME';

remarque: le nom de la table doit être en majuscule.

Si vous ne connaissez pas le nom de la table,

select constraint_name,constraint_type,table_name 
from user_constraints;
7
kapil kumar

La seule chose qui m'a renvoyé des contraintes:

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

Choisi dans documentation Oracle

0
Gweltaz Niquel

Utilisez l'une des deux commandes ci-dessous. Tout doit être en majuscule. 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';
0
Raymond Wachaga