Identificar qual coluna está atribuida a um índice

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Pablo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 190
Registrado em: Sex, 27 Out 2006 11:12 am
Localização: 88350000
Pablo

Mestres, boa tarde.

Estou querendo identificar quais colunas de uma tabela estão com índice e também quais colunas de uma tabela são foreign key.

Bom, com essas 2 identificações pretendo vasculhar meu banco com a intenção de identificar quais foreign key estão sem índice.


Abraços
Avatar do usuário
adrianoturbo
Moderador
Moderador
Mensagens: 393
Registrado em: Qui, 20 Mar 2008 4:09 pm
Localização: Brasília
Adriano Alves
---Para cada problema dificil existe uma solução simples.----

Brother,a view ALL_IND_COLUMNS é perfeita ,ela retorna todas as colunas indexadas de todas as tabelas atualmente.
Além dessa view tem mais duas que também são interessantes que retornam as colunas indexadas :
-DBA_IND_COLUMNS -retorna coluna indexadas de todas as tabelas do banco de dados.
-USER_IND_COLUMNS -retorna as colunas indexadas dos usuários conectados atualmente.

Selecionar tudo

SELECT COLUMN_NAME FROM  ALL_IND_COLUMNS
ORDER BY COLUMN_NAME

Selecionar tudo

SELECT COLUMN_NAME FROM  DBA_IND_COLUMNS
ORDER BY COLUMN_NAME

Selecionar tudo

SELECT COLUMN_NAME FROM  USER_IND_COLUMNS
ORDER BY COLUMN_NAME
Bom é isso Brother,espero ter ajudado e boa sorte !!!
Avatar do usuário
adrianoturbo
Moderador
Moderador
Mensagens: 393
Registrado em: Qui, 20 Mar 2008 4:09 pm
Localização: Brasília
Adriano Alves
---Para cada problema dificil existe uma solução simples.----

Faltou falar das foreign keys ,seguinte Brother,uma view excelente para descobrir todas chaves estrangeiras é a ALL_CONSTRAINTS .
Além dessa existe mais duas views:
-DBA_CONSTRAINTS -retorna todas as definições restrições do banco de dados
-USER_CONSTRAINTS -retorna todas as definições restrições de uma tabela de um usuário conectado.
Seguem os booleanos :
C =checar restrição de uma tabela
P= chave primária
U =chave única
R =chave estrangeira
V =com opção de checar,na view
O =apenas leitura, na view

Selecionar tudo

SELECT * from ALL_CONSTRAINTS
WHERE CONSTRAINT_TYPE ='C'

Selecionar tudo

SELECT * from ALL_CONSTRAINTS
WHERE CONSTRAINT_TYPE ='P'

Selecionar tudo

SELECT * from ALL_CONSTRAINTS
WHERE CONSTRAINT_TYPE ='U'

Selecionar tudo

SELECT * from ALL_CONSTRAINTS
WHERE CONSTRAINT_TYPE ='R'

Selecionar tudo

SELECT * from ALL_CONSTRAINTS
WHERE CONSTRAINT_TYPE ='V'

Selecionar tudo

SELECT * from ALL_CONSTRAINTS
WHERE CONSTRAINT_TYPE ='O'
Pablo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 190
Registrado em: Sex, 27 Out 2006 11:12 am
Localização: 88350000
Pablo

Bom dia Adriano.

Cara, eu já tinha chego nessas view...o problema, é que a view ALL_CONSTRAINSTS não mostra em qual coluna da tabela é a constraint_name.

Por exemplo:

Selecionar tudo

SELECT * from ALL_CONSTRAINTS ,
WHERE CONSTRAINT_TYPE ='R' and owner = 'MEU_OWNER' and TABLE_NAME = 'CLIENTE'
uma das linhas de retorno é a coluna constraint_name (informando o nome da minha fk) que aponta a descrição CLIENTE_CIDADE_FK....porém eu preciso saber qual nome de coluna é a fk referenciada (no caso é a coluna COD_CIDADE).

Não sei se fui claro.

Abraços
Pablo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 190
Registrado em: Sex, 27 Out 2006 11:12 am
Localização: 88350000
Pablo

Achei turma...

tem q fazer um join com a view ALL_CONS_COLUMNS...

fica assim:

Selecionar tudo

SELECT t.CONSTRAINT_NAME,
            p.COLUMN_NAME f
rom ALL_CONSTRAINTS t,
       all_cons_columns p
WHERE t.CONSTRAINT_TYPE ='R' 
and t.owner = 'MEU_OWNER' 
and t.TABLE_NAME = 'CLIENTE'
and p.owner = 'MEU_OWNER' 
and p.TABLE_NAME = 'CLIENTE'
and t.CONSTRAINT_NAME = p.CONSTRAINT_NAME
Valeu ai turma :mrgreen:
Avatar do usuário
adrianoturbo
Moderador
Moderador
Mensagens: 393
Registrado em: Qui, 20 Mar 2008 4:09 pm
Localização: Brasília
Adriano Alves
---Para cada problema dificil existe uma solução simples.----

Opa que bom que conseguiu Brother.
:-o
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Majestic-12 [Bot] e 14 visitantes