Exibe os nomes de todas as restrições para uma tabela no Oracle SQL

115

Eu defini um nome para cada restrição para as várias tabelas que criei no Oracle SQL.

O problema é que, para eliminar uma restrição da coluna de uma tabela específica, preciso saber o nome que forneci para cada restrição, que esqueci.

Como faço para listar todos os nomes de restrições que especifiquei para cada coluna de uma tabela?

Existe alguma instrução SQL para fazer isso?

Jeris Alan
fonte

Respostas:

160

Você precisa consultar o dicionário de dados , especificamente a USER_CONS_COLUMNSvisualização para ver as colunas da tabela e as restrições correspondentes:

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

Para sua informação, a menos que você tenha criado especificamente sua tabela com um nome em minúsculas (usando aspas duplas), o nome da tabela será padronizado para maiúsculas, portanto, certifique-se de que assim seja em sua consulta.

Se desejar ver mais informações sobre a própria restrição, consulte a USER_CONSTRAINTSvisualização:

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

Se a tabela for mantida em um esquema que não seja o padrão, talvez seja necessário substituir as visualizações por:

all_cons_columns

e

all_constraints

adicionando à cláusula where:

   AND owner = '<schema owner of the table>'
Ollie
fonte
Erro de digitação:USER_CONS_COLUMNS
Paul Draper
3
<nome da sua mesa> diferencia maiúsculas de minúsculas, eu acho; Deve estar em maiúsculas.
Kanagavelu Sugumar
O ownercampo em (user | all | dba) _constraints e (user | all | dba) _cons_columns é o proprietário da restrição, não o proprietário da tabela (de acordo com a documentação Oracle). O proprietário da tabela não é um campo disponível em nenhuma dessas visualizações. Isso significa que o proprietário da restrição e o proprietário da tabela devem ser os mesmos?
David Fletcher
14
SELECT * FROM USER_CONSTRAINTS
Paciv
fonte
2
Isso não dará a você o nome da coluna
Jasper de Vries,
Use all_constraints
Sandip Nirmal
11

talvez isso possa ajudar:

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

Felicidades

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

nota: o nome da tabela deve estar em maiúsculas.

Caso você não saiba o nome da mesa então,

select constraint_name,constraint_type,table_name 
from user_constraints;
Kapil Kumar
fonte
4

Muitas vezes, os bancos de dados corporativos têm vários usuários e não estou sempre no usuário certo:

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

Selecionado da documentação Oracle

Gweltaz Niquel
fonte
0

Use um dos dois comandos abaixo. Tudo deve estar em letras maiúsculas. O nome da tabela deve ser colocado entre aspas:

--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
fonte