Las consultas jerárquicas amplían la típica relación entre padres e hijos en una construcción de varias generaciones. En la típica relación entre padres e hijos, una tabla contendrá filas primarias, y otra tabla contendrá las filas secundarias. En otras palabras, sólo dos generaciones están representados.
Los datos jerárquicos tiene una estructura diferente para permitir la posibilidad de múltiples generaciones. En lugar de dos tablas separadas con una tabla primaria y una tabla secundaria, todos los datos se introducen en una sola tabla o estructura similar (como una vista), y las múltiples generaciones se definen sobre la base de los datos dentro de cada fila. El resultado es que podríamos tener padre-hijo-nieto-bisnieto, y así sucesivamente.
El ejemplo clásico de una jerarquía es un organigrama, en el que un CEO es el nivel superior, o el nodo raíz, y todo el mundo en la organización que reporta directamente al CEO es un registro hijo en el segundo nivel. Además, cada empleado que informa al segundo nivel es un nieto del nodo raíz y existe en el tercer nivel en relación con el nodo raíz, y así sucesivamente.
La primera muestra de nivel el director general, que sirve como el nodo raíz de esta jerarquía. El segundo nivel consiste en nodos que dependen del nodo raíz. Cada uno de ellos representa una rama en el árbol, en el que el director financiero termina su rama en particular, por lo que es un nodo hoja. Pero los otros dos nodos continúan Nivel 3, y así sucesivamente.
Para poder llevar esta practica vamos a crear una tabla que va a soportar una estructura jerárquica:
Y un constraint para solo agregar códigos de empleados a quien reportar que sean validos
Ahora llenaremos la tabla con información
Para crear una consulta jerárquica, utilizamos la instrucción START WITH y CONNECT BY, de la siguiente manera
Crear un informe con estructura de árbol
Una técnica común para el uso de LEVEL es incorporarlo en algunas funciones de formato para producir una salida más fácil de leer. Por ejemplo, la función LPAD se puede utilizar para agregar espacios y sangría a los valores título basado en el nivel de cada valor representa. Por ejemplo:
Para más información, pueden consultar la documentación de Oracle.
0 Comments