Ya vimos en el anterior post cómo funcionaba la función LEVEL de PL/SQL. Ahora veremos algunos aspectos avanzados para poder obtener la información con más sustancia.
Un ejemplo de la SQL del post anterior con lo nuevo que vamos a aprender sería:
select f.folderid, f.parentfolderid, f.name, level ,CONNECT_BY_ISLEAF as RAIZ ,CONNECT_BY_ROOT name as PERTENECE_A ,SYS_CONNECT_BY_PATH(name,'/') as RUTA from folder f start with f.folderid = 1 and f.parentfolderid is null -- Empieza por el raíz connect by prior f.folderid = f.parentfolderid -- Genera el árbol hacia abajo ORDER siblings BY name
ORDER siblings BY campo1,campo2
Con esto conseguimos que la estructura jerárquica salga ordenada alfabéticamente teniendo en cuenta primero el campo1, después el campo2,... y así sucesivamente.
En esta instrucción se pueden poner campos que estén fuera de la columna sobre la que se ha construido el árbol jerárquico manteniendo el orden de éste.
CONNECT_BY_ISLEAF as RAIZ
Esta instrucción devuelve 0 si el elemento es raíz o 1 si es hijo de la raíz.
CONNECT_BY_ROOT campo as PERTENECE_A
Esta instrucción nos da el valor del padre.
SYS_CONNECT_BY_PATH(campo,'/') as RUTA
Con esta instrucción obtenemos toda la estructura concatenada por el caracter que le indiquemos. Si el carácter forma en algún momento parte del valor del campo, obtendremos un error indicándonoslo y tendremos que usar otro carácter distinto.