Dúvida para relatório SQL
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
Post 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; end
Emerson Nascimento
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
10/10/2019
Mauricio Espido
15/10/2019
Emerson Nascimento
o resultado será em texto?
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.
15/10/2019
Mauricio Espido
Clique aqui para fazer login e interagir na Comunidade :)