
1° campo : id de la zona
2° campo : descripción de la zona
3° campo : id de la zona padre
Con este query podemos obtener la jerarquía de una zona (mostrando todos sus sucesores):
En este ejemplo, los sucesores de "Region"
select de_geographical_zone, LEVEL
from geographical_zone
START WHITH co_geographical_zone = 2
CONNECT BY PRIOR co_geographical_zone = co_geog_zone_parent order by level

El campo level no existe en la tabla, es una variable de oracle.
Lo complicado aquí es obtener los padres o predecesores de una zona :
podemos usar el SYS_CONNECT_BY_PATH :
select
SYS_CONNECT_BY_PATH(de_geographical_zone, '\') as descripcion, LEVEL
from geographical_zone
where co_geographical_zone = 4
CONNECT BY PRIOR co_geographical_zone = co_geog_zone_parent
order by level
Lo malo que vamos a tener un separador que lo divide :(
para este caso agregaríamos los métodos INSTR y SUBSTR
select
SUBSTR(SYS_CONNECT_BY_PATH(de_geographical_zone_type, '\') || '\',
(INSTR(SYS_CONNECT_BY_PATH(de_geographical_zone_type, '\')|| '\','\',1,1)+1),
(INSTR(SYS_CONNECT_BY_PATH(de_geographical_zone_type, '\')|| '\','\',1,2))-2) as descripcion,
LEVEL
from geographical_zone
where co_geographical_zone = 4
CONNECT BY PRIOR co_geographical_zone = co_geog_zone_parent
order by level
Comentarios