Construindo uma Árvore com apenas um comando SQL – ORACLE

Caríssimos, quanto tempo hein!

Estou todo enrolado me preparando para a viajem da minha vida! Passei no mestrado em Pernambuco (UFPE) e irei cursá-lo para felicidade geral da nação, pelo menos lá em casa!

Hoje, ainda no trabalho me deparei com o desafio de criar uma forma de produzir uma hierarquia com um certo Objeto (Enfim um post de JAVA!). Situação era:

O Modelo Casa tinha 2 Vizinhos, cada vizinho tinha mais dois outros vizinhos que não era a primeira casa, e assim sucessivamente. No banco de dados eu tinha uma tabela assim:

create table hierarquia (

casa_pai_codg number(5,0);

casa_filho_codg number(5,0);

tipo_vizinho char(1 BYTE)

);

Assim, no meu pequeno entendimento eu pensei:

Uma casa tem um pai, esse pai é vizinho da casa filho ou pela esquerda ou pela direita.

Baseado nisso, corri nos foruns americanos que discutem sobre o Oracle, o nosso banco em questão. Depois de muito fuçar achei uma operação relativamente simples que constrói uma árvore a partir de um nó.


--Executei essa query na tabela que mostrei anteriormente
select
casa_pai_codg as pai,
casa_filho_codg as filho,
level as nivelHierarquivo
from hierarquia
start with casa_pai_codg = 1 connect by prior casa_filho_codg = casa_pai_codg
order by level

Tal função retorna um pool de registros indicando pai e filhos a partir de um pai conhecido (no nosso caso o pai número 1) e ordena pelo LEVEL que ele ocupa na nossa árvore. Não necessariamente a árvore precisa ser binária.

Testes ainda a serem feitos:

Quando os relacionamentos formam um GRAFO.

Enjoy!