Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

João Otávio 21

Select Hierárquico

Recommended Posts

Bom dia pessoal,

Tenho uma tabela no meu banco de dados que contem dados em forma Pai/Filho na seguinte estrutura:

--------------------------------------
| A44_MPAI | A44_MFILHO |
--------------------------------------
| 87688455P | 87688452P |
--------------------------------------

| 87688456P | 87688452P |
--------------------------------------
| 87688450P | 87688455P |
--------------------------------------

No caso, 87688452P é filho de 87688455P e 87688456P
e 87688455P é filho de 87688450P.

Pesquisando na internet encontrei o Select Hierárquico.. Tentei desenvolver um código para mostrar toda estrutura começando do meu item 87688452P, porem, sem exito.

Meu código está assim:

SELECT A44_MPAI, A44_MFILHO, LEVEL   FROM TBLA44_BOM  START WITH A44_MFILHO = '87688452P'  CONNECT BY NOCYCLE  PRIOR A44_MPAI = '87688452P'

Ele me retorna o seguinte resultado:
--------------------------------------------------
| A44_MPAI | A44_MFILHO | LEVEL |
--------------------------------------------------
| 87688455P | 87688452P | 1 |
--------------------------------------------------

| 87688456P | 87688452P | 1 |
--------------------------------------------------

Alguém poderia me ajudar a encontrar toda a hierarquia que tenho começando do filho 87688452P ??

Muito obrigado,
João Otávio

================================================================

Problema resolvido. Segue solucao:

SELECT A44_MPAI, A44_MFILHO, LEVEL FROM TBLA44_BOMSTART WITH A44_MFILHO = '87688452P'CONNECT BY PRIOR A44_MPAI = A44_MFILHOORDER BY LEVEL

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza, connect by é show

 

Motta,

 

Quando eu faco esta consulta ele me mostra os LEVELS..

Eu quero pegar tudo que for do último level.. ou seja, " MAX(LEVEL) "

 

 

Já tentei de várias formas, inclusive com o PARTITION, mas nao consegu, dá erro.

 

SELECT A44_ID, A44_MPAI, A44_MFILHO, LEVEL
FROM 
(
  SELECT A44_ID, A44_MPAI, A44_MFILHO, LEVEL, MAX(LEVEL) OVER (PARTITION BY A44_ID) AS MAX_LEVEL
  FROM TBLA44_BOM
  START WITH A44_MFILHO = '87627232P'
  CONNECT BY PRIOR A44_MPAI = A44_MFILHO
  ) 
WHERE LEVEL = MAX_LEVEL
GROUP BY A44_ID, A44_MPAI, A44_MFILHO
ORDER BY LEVEL;

 

ORA-01788: cláusula CONNECT BY obrigatória neste bloco de consulta
01788. 00000 - "CONNECT BY clause required in this query block"
Como posso resolver este problema ?
Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nunca fiz nada assim, mas tente fazer a query do connect by no básico

Use este sql como tabela virtual para o "over"

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.