Mostrar nombres de todas las restricciones para una tabla en Oracle SQL

115

He definido un nombre para cada una de las restricciones para las múltiples tablas que he creado en Oracle SQL.

El problema es que para eliminar una restricción para la columna de una tabla en particular, necesito saber el nombre que he proporcionado para cada restricción, que he olvidado.

¿Cómo enumero todos los nombres de restricciones que he especificado para cada columna de una tabla?

¿Existe alguna declaración SQL para hacerlo?

Jeris Alan
fuente

Respuestas:

160

Debe consultar el diccionario de datos , específicamente la USER_CONS_COLUMNSvista para ver las columnas de la tabla y las restricciones correspondientes:

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

Para su información, a menos que haya creado específicamente su tabla con un nombre en minúscula (usando comillas dobles), entonces el nombre de la tabla estará predeterminado en mayúsculas, así que asegúrese de que sea así en su consulta.

Si luego desea ver más información sobre la propia restricción, consulte la USER_CONSTRAINTSvista:

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

Si la tabla se mantiene en un esquema que no es su esquema predeterminado, es posible que deba reemplazar las vistas con:

all_cons_columns

y

all_constraints

agregando a la cláusula where:

   AND owner = '<schema owner of the table>'
Ollie
fuente
Error tipográfico:USER_CONS_COLUMNS
Paul Draper
3
<el nombre de su tabla> es sensible a mayúsculas y minúsculas, creo; Debería estar en mayúsculas.
Kanagavelu Sugumar
El ownercampo en (user | all | dba) _constraints y (user | all | dba) _cons_columns es el propietario de la restricción, no el propietario de la tabla (según la documentación de Oracle). El propietario de la tabla no es un campo disponible en ninguna de estas vistas. ¿Significa esto que el propietario de la restricción y el propietario de la tabla deben ser el mismo?
David Fletcher
14
SELECT * FROM USER_CONSTRAINTS
Paciv
fuente
2
Esto no le dará el nombre de la columna
Jasper de Vries
Use all_constraints
Sandip Nirmal
11

tal vez esto pueda ayudar:

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

salud

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

nota: el nombre de la tabla debe estar en mayúsculas.

En caso de que no sepa el nombre de la mesa,

select constraint_name,constraint_type,table_name 
from user_constraints;
kapil kumar
fuente
4

A menudo, las bases de datos empresariales tienen varios usuarios y no siempre estoy en el correcto:

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

Elegido de la documentación de Oracle

Gweltaz Niquel
fuente
0

Utilice cualquiera de los dos comandos siguientes. Todo debe estar en mayúsculas. El nombre de la tabla debe estar entre comillas:

--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';
Raymond Wachaga
fuente