Cursores

Buenas tardes:
Tengo el siguiente problema
En una tabla de departamentos tengo el id del departamento y el id del departamenteo padre, la ewstructura es algo así por ejemplo:
Nombre cod codpadre
SISTEMAS 1 NULL
SOPORTE 2 1
SOPORTE BD 3 2
DESARROLLO 4 1
APLIC. WEB 5 4
aplic local 6 4
Y ASÍ...
Al procedimiento le llega el id del departamento y la idea es sacar una lista de todos los deparatamentos hijos, y los hijos de esos hijos y así hasta terminar. Es como recorrer un árbol hasta el final.
Lo estaba hiciendo con cursores, llenado el primer cursor con los hijos del departamento que llegaba como parámetro, y en otro cursor los hijos de los departamentos que acababa de llenar en el primer cursor. Pero eso solo me recorre dos niveles de profundidad y necesito hacer dinámico hasta el final
¿Puedes echarme una mano?
De antemano muchas gracias
Andres R.

2 Respuestas

Respuesta
1
Para recorrer más de dos niveles de profundidad necesitas anidar más de dos cursores.
1. Cursor con los hijos de un dpto
2. Para cada uno que encuentres en cursor 1, otro cursor con los hijios de ese encontrado.
3. Para cada uno que encuentres en cursor 2, otro cursor con los hijios de ese encontrado.
4. Más de lo mismo, hasta el ultimo nivel
Necesitas saber o establecer el numero máximo de niveles que tendrá el árbol. Eso puede que lo sepas o que lo puedas calcular previamente con una rutina que siga esas dependencias. Si no lo sabes, establece tu un numero de niveles al que sepas que no vas a llegar. Ese será el numero de cursores que debas anidar.
Respuesta
1
Si. Es mucho más sencillo. Incluso puedes utilizar la consulta para crearte un árbol con número de nivel o aplicar a este un Espaciado o Tabulación ...
De dejo un ejemplo :
select level, nombre
From DEPARTAMENTOS
Start with cod = -- elemento raiz o padre (su código) o poner el nombre
connect by prior codpadre=cod
Y ya está ...
Pruébalo ...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas