Fórum Dúvida para relatório SQL #605932
10/10/2019
0
Possuo a seguinte estrutura de tabela:
nivel / codigopai / codigofilho:
1 casa sala
1 casa cozinha
1 casa patio
2 sala mesa
2 sala rack
2 cozinha microondas
2 cozinha geladeira
3 mesa marrom
3 rack amarelo
3 microondas prata
3 geladeira branca
1 garagem carro
1 garagem bancada
2 celta 4 portas
2 ferramentas metal
porém, as vezes terei uma estrutura dentro de outra, como por ex:
nivel / codigopai / codigofilho:
1 casa cozinha
2 cozinha microondas
3 microondas prata
2 sala mesa
2 sala rack
1 garagem carro
2 celta 4 portas
1 garagem bancada
2 ferramentas metal
e por aí vai.
Não estou conseguindo fazer essa estruturação, por níveis e quebras, alguém para ajudar? A idéia é montar algo nesse estilo no relatório, como exemplo:
1 pai filho
2 pai filho
2 pai filho
3 pai filho
3 pai filho
2 pai filho
1 pai filho
2 pai filho
3 pai filho
3 pai filho
4 pai filho
3 pai filho
2 pai filho
1 pai filho
1 pai filho
desculpa por me estender demais, parece uma pergunta com uma resposta simples mas estou apanhando sozinho. Agradeço.
Mauricio Espido
Curtir tópico
+ 0Post mais votado
15/10/2019
Com certeza há erros de sintaxe, mas acho que serve como ponto de partida.
create or replace procedure EstrutProduto(vNivel in int, vCodPai in varchar(15))
as
--Declarando as variáveis que serão manipuladas
vCodFilho varchar(15);
--Criando o cursor que fará um select na tabela de estruturas...
cursor cEstrut is
SELECT CODIGOPAI, CODIGOFILHO FROM TBESTRUTURA WHERE COALESCE(CODIGOPAI,'') = COALESCE(:vCodPai,'') ORDER BY NIVEL;
begin
vNivel := Coalesce(vNivel,1);
--Abrindo o cursor
open cEstrut;
--Instrução de início do loop
loop
--Atribuindo o retorno da consulta, às variáveis
fetch cEstrut into vNivel, vCodPai, vCodFilho;
--Incluindo uma condição para saída do loop
exit when cEstrut%notfound;
if (vNivel = 1) then
ILevel := ''
else
ILevel := lpad(' ', 15 * (vNivel-1), ' ')
endi if;
ILevel := ILevel || vCodPai || ' ' || vCodFilho;
--Imprime o resultado na tela
dbms_output.put_line(ILevel);
--Chama a própria stored procedure, de forma recursiva
EstrutProduto(vNivel+1, vCodFilho);
--Instrução para finalizar o loop
end loop;
--Fechando o cursor para disponibilizar os recursos que estavam sendo utilizados
close cEstrut;
endEmerson Nascimento
Gostei + 1
Mais Posts
10/10/2019
Mauricio Espido
Boa tarde!
Possuo a seguinte estrutura de tabela:
nivel / codigopai / codigofilho:
1 casa sala
1 casa cozinha
1 casa patio
2 sala mesa
2 sala rack
2 cozinha microondas
2 cozinha geladeira
3 mesa marrom
3 rack amarelo
3 microondas prata
3 geladeira branca
1 garagem carro
1 garagem bancada
2 celta 4 portas
2 ferramentas metal
porém, as vezes terei uma estrutura dentro de outra, como por ex:
nivel / codigopai / codigofilho:
1 casa cozinha
2 cozinha microondas
3 microondas prata
2 sala mesa
2 sala rack
1 garagem carro
2 celta 4 portas
1 garagem bancada
2 ferramentas metal
e por aí vai.
Não estou conseguindo fazer essa estruturação, por níveis e quebras, alguém para ajudar? A idéia é montar algo nesse estilo no relatório, como exemplo:
1 pai filho
-----2 pai filho
-----2 pai filho
----------3 pai filho
----------3 pai filho
-----2 pai filho
1 pai filho
-----2 pai filho
----------3 pai filho
----------3 pai filho
---------------4 pai filho
----------3 pai filho
-----2 pai filho
1 pai filho
1 pai filho
Gostei + 0
10/10/2019
Mauricio Espido
Gostei + 0
15/10/2019
Emerson Nascimento
o resultado será em texto?
Gostei + 0
15/10/2019
Mauricio Espido
o resultado será em texto?
sim, pode ser um stored, seria em oracle, porém não tenho idéia de como montar e trazer o retorno depois.
Gostei + 0
15/10/2019
Mauricio Espido
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)