Oracle encontra uma restrição

166

Eu tenho uma restrição chamada users.SYS_C00381400. Como encontro o que é essa restrição? Existe uma maneira de consultar todas as restrições?

David Oneill
fonte
como conhecer a restrição? Os usuários.SYS_C00381400
Vinay
O nome da restrição apareceu em uma mensagem de erro.
David Davill

Respostas:

267
select * from all_constraints
where owner = '<NAME>'
and constraint_name = 'SYS_C00381400'
/

Como todas as visualizações de dicionário de dados, essa é uma visualização USER_CONSTRAINTS se você deseja apenas verificar seu esquema atual e uma visualização DBA_CONSTRAINTS para usuários da administração.

A construção do nome da restrição indica um nome de restrição gerado pelo sistema. Por exemplo, se especificarmos NOT NULL em uma declaração de tabela. Ou, de fato, uma chave primária ou única. Por exemplo:

SQL> create table t23 (id number not null primary key)
  2  /

Table created.

SQL> select constraint_name, constraint_type
  2  from user_constraints
  3  where table_name = 'T23'
  4  /

CONSTRAINT_NAME                C
------------------------------ -
SYS_C00935190                  C
SYS_C00935191                  P

SQL>

'C'para cheque, 'P'para primário.

Geralmente, é uma boa idéia atribuir um nome explícito às restrições relacionais. Por exemplo, se o banco de dados criar um índice para a chave primária (o que fará se essa coluna ainda não estiver indexada), ele usará o nome da restrição ou o nome do índice. Você não deseja um banco de dados cheio de índices nomeados como SYS_C00935191.

Para ser honesto, a maioria das pessoas não se preocupa em nomear restrições NOT NULL.

APC
fonte
25

Para obter uma descrição mais detalhada (qual tabela / coluna faz referência a qual tabela / coluna), você pode executar a seguinte consulta:

SELECT   uc.constraint_name||CHR(10)
   ||      '('||ucc1.TABLE_NAME||'.'||ucc1.column_name||')' constraint_source
   ,       'REFERENCES'||CHR(10)
   ||      '('||ucc2.TABLE_NAME||'.'||ucc2.column_name||')' references_column
FROM user_constraints uc ,
  user_cons_columns ucc1 ,
  user_cons_columns ucc2
WHERE uc.constraint_name = ucc1.constraint_name
AND uc.r_constraint_name = ucc2.constraint_name
AND ucc1.POSITION        = ucc2.POSITION -- Correction for multiple column primary keys.
AND uc.constraint_type   = 'R'
AND uc.constraint_name   = 'SYS_C00381400'
ORDER BY ucc1.TABLE_NAME ,
  uc.constraint_name;

A partir daqui .

Thiago
fonte
6

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";
Van Gogh
fonte