Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Recorrer Árbol en Oracle

Estas en el tema de Recorrer Árbol en Oracle en el foro de Oracle en Foros del Web. hola comunidad ahora mas que una consulta es un aporte, en uno de esos tantos dias de trabajo nos pidieron que hicieramos un árbol Jerárquico ...
  #1 (permalink)  
Antiguo 05/02/2010, 11:49
Avatar de ah_puch  
Fecha de Ingreso: agosto-2005
Ubicación: Ecatepec, México
Mensajes: 180
Antigüedad: 18 años, 7 meses
Puntos: 3
Recorrer Árbol en Oracle

hola comunidad ahora mas que una consulta es un aporte, en uno de esos tantos dias de trabajo nos pidieron que hicieramos un árbol Jerárquico con .net y oracle. Es decir a partir de nodo X del árbol principal desglosara de manera automática todo el contenido de ese nodo hasta el ultimo dato que tuviera algo parecido a esto: algo asi:

RAIZ
|
|->R1
|****** |->R1_H1
|*******|*** | ->R1_H1_SH1
|****** |->R1_H2
|*******|*** | ->R1_H2_SH1
|->R2
|->R2_H1

dado el ID del nodo (en color Rojo) me desglose todos los nodos (en color verde) hasta el ultimo nodo que estos tuvieran de tal modo que sin importar el id que me den desglose todo hasta ultimo nodo hijo que pendan de ese nodo.

mediante oracle ordenar los datos se hace de manera sencilla tenemos que ultizar lo metodos PRIOR, WITH y START

de tal modo que nuestra consulta oracle quedaria algo asi
Código:
 SELECT PUESTO_ID,PADRE_ID
   FROM PUESTOS
  START WITH PUESTO_ID = 'NODO INICIAL'
CONNECT BY PRIOR PADRE_ID = PUESTO_ID;
DONDE:
START WITH -> Nos indica apartir de que nodo vamos a comenzar.
CONECT BY -> Nos establece en que columna vamos a buscar nuestros nodos padre.

PRIOR -> Indica el modo de recorrido del arbol de tal modo que en el codigo anterior es un recorrido de la siguente forma:
HOJA -> RAMA -> ARBOL
Que aplicado a nuestro esque anterior :
R1_H1_SH1 --> R1_H1--->R1

para hacer el recorrodo inverso solo basta con mover la instruccion PRIOR de lado de la siguente forma
Código:
 SELECT PUESTO_ID,PADRE_ID
   FROM PUESTOS
  START WITH PUESTO_ID = 'NODO INICIAL'
CONNECT BY PADRE_ID = PRIOR PUESTO_ID;
y el recorrido sera asi:
ARBOL-->RAMA--> HOJA

R1---->R1_H1--->R1_H1_SH1

bueno así fue como lo solucionamos espero les sea de utilidad este pequeño aporte.
__________________
La programacion no es un trabajo, es un Arte
http://www.purodev.blogspot.com

Última edición por ah_puch; 05/02/2010 a las 12:51

Etiquetas: recorrer
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:02.