Alguém em algum momento observou algum problema na utilização de querie hierárquica no Oracle, pois quando utilizo querie hierarquica com base oracle nas consultas(grid) no scriptcase os filtros apresentam erros e pior erros de execução do relatório.
Está utilizando
START WITH
e
CONNECT BY ???
Para quem não sabe, segue explicação de query hierarquica:
CREATE TABLE empregados (
id NUMBER PRIMARY KEY,
nome VARCHAR2(50),
gerente_id NUMBER REFERENCES empregados(id)
);
A tabela empregados
armazena informações sobre funcionários e seus gerentes. O campo gerente_id
referencia o id
do gerente de cada funcionário. Vamos inserir alguns dados de exemplo:
sql
INSERT INTO empregados (id, nome, gerente_id) VALUES (1, 'Ana', NULL);
INSERT INTO empregados (id, nome, gerente_id) VALUES (2, 'Bruno', 1);
INSERT INTO empregados (id, nome, gerente_id) VALUES (3, 'Carlos', 1);
INSERT INTO empregados (id, nome, gerente_id) VALUES (4, 'Diana', 2);
INSERT INTO empregados (id, nome, gerente_id) VALUES (5, 'Eva', 2);
Agora, podemos criar uma query hierárquica para visualizar a hierarquia de gerentes e empregados:
sql
SELECT
LPAD(' ', LEVEL * 2) || nome AS hierarquia
FROM
empregados
START WITH
gerente_id IS NULL
CONNECT BY
PRIOR id = gerente_id;
Vamos entender o que cada parte da query faz:
-
START WITH gerente_id IS NULL
: Define o ponto de início da hierarquia. Neste caso, começamos pelos funcionários que não têm gerente, ou seja, os de nível mais alto (Ana). -
CONNECT BY PRIOR id = gerente_id
: Estabelece a relação hierárquica. A palavra-chavePRIOR
refere-se ao registro pai na hierarquia. Aqui, estamos dizendo que ogerente_id
do funcionário atual deve corresponder aoid
do registro anterior (gerente). -
LEVEL
: Uma pseudo-coluna que retorna a profundidade do registro atual na hierarquia, começando em 1 para os registros de nível mais alto. -
LPAD(' ', LEVEL * 2) || nome AS hierarquia
: Formata a saída adicionando espaços à esquerda do nome do funcionário, conforme o nível na hierarquia, para visualizarmos melhor a estrutura.
A saída será:
plaintext
Ana
Bruno
Diana
Eva
Carlos
Sim utilizando estrutura basica START WITH e CONNECT BY.
Nesse caso em específico aconselho usar View.