Jerarquía en una consulta SQL Oracle SQL y PL/SQL

hay algunas veces necesitamos darle un orden jerárquico a datos que están en la misma consulta, para esto utilizamos la función connect by para comparar los campos y start with para indicarle cual es el dato inicial, si no está el start with realizara el proceso por cada registro.
Nota: Al utilizar la función connect by se agrega un dato el level, que indica en qué nivel de jerarquía esta.

Ejemplo: Queremos saber el orden de la empresa. 
Creamos una tabla donde agregamos la jerarquía de la empresa
create table jerarquia_gerencial(
       codigo       number,
       nombre_cargo varchar2(200),
       codigo_padre number

);

Insertamos 7 registros.

insert into jerarquia_gerencial values (1,‘Director General’,null)
insert into jerarquia_gerencial values (2,‘Viceprecidente Ventas’,1);
insert into jerarquia_gerencial values (3,‘Jefe de Ventas’,2);
insert into jerarquia_gerencial values (4,‘Ventas’,3);
insert into jerarquia_gerencial values (5,‘Viceprecidente Servicio’,1);
insert into jerarquia_gerencial values (6,‘Jefe de Servicios’,5);

insert into jerarquia_gerencial values (7,‘Soporte Tecnico’,6);

Realizamos una consulta en orden de la misma tabla.

select codigo,codigo_padre,nombre_cargo
from jerarquia_gerencial a
connect by prior codigo = codigo_padre

start with codigo_padre is null;

Output:

Para que se vea mejor podemos utilizar una función LPAD y el recurso level.
select codigo,codigo_padre,Lpad(nombre_cargo,length(nombre_cargo)+(level*3),‘ ‘) Cargo
from jerarquia_gerencial a
connect by prior codigo = codigo_padre

  start with codigo_padre is null;

Output:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Más info

aceptar