Página 1 de 1

Query hierárquica

Enviado: Ter, 28 Abr 2020 3:48 pm
por Marciel
Boa tarde,

Tenho uma tabela de centro de custos hierárquica:
COD, CODPAI, CONTA, DESCRICAO
e tenho uma tabela com os usuários que pertencem a cada centro de custos:
CODCC, CODUSUARIO

Dados dois usuários A e B, preciso verificar se o usuário A está no mesmo nível ou abaixo do usuário B. Montei uma função PL/SQL, mas o desempenho está ruim.

É possivel montar diretamente em uma consulta SQL?

O Oracle tem algum recurso relacionado que ajude nesse caso?

Re: Query hierárquica

Enviado: Ter, 28 Abr 2020 4:20 pm
por dr_gori
Sim. CONNECT BY.
Aqui no form tem vários exemplos.

Veja esse tirado do manual da Oracle: (nesse caso, fazendo a ligaçao pelo GERENTE, que também é um funcionario)

Selecionar tudo

SELECT last_name "Employee", CONNECT_BY_ISCYCLE "Cycle",
   LEVEL, SYS_CONNECT_BY_PATH(last_name, '/') "Path"
   FROM employees
   WHERE level <= 3 AND department_id = 80
   START WITH last_name = 'King'
   CONNECT BY NOCYCLE PRIOR employee_id = manager_id AND LEVEL <= 4;

Employee                   Cycle  LEVEL Path
------------------------- ------ ------ -------------------------
Russell                        1      2 /King/Russell
Tucker                         0      3 /King/Russell/Tucker
Bernstein                      0      3 /King/Russell/Bernstein
Hall                           0      3 /King/Russell/Hall
Olsen                          0      3 /King/Russell/Olsen
Cambrault                      0      3 /King/Russell/Cambrault
Tuvault                        0      3 /King/Russell/Tuvault
Partners                       0      2 /King/Partners
King                           0      3 /King/Partners/King
Sully                          0      3 /King/Partners/Sully
McEwen                         0      3 /King/Partners/McEwen
https://docs.oracle.com/cd/B19306_01/se ... ies003.htm