Ajuda com verificação
25/09/2018
0
segue o código:
SELECT ITE.CODVEND, ITE.APELIDO, GERENTE, :PERIODO.INI AS "DTINICIAL", :PERIODO.FIN AS "DTFINAL", TO_DATE(:PERIODO.FIN,'DD/MM/YYYY') - TO_DATE (:PERIODO.INI,'DD/MM/YYYY') + 1 AS "QTD_DIAS", AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN) AS "QTD_DIAS_UTEIS", SUM(ITE.QTDNEG) AS "QTDNEG_TOT", SUM(ITE.PESO_TOT) AS "PESO_TOT", SUM(ITE.VLRTOT_LIQ) / SUM(ITE.QTDNEG) AS "VLRUNIT", SUM(ITE.VLRTOT_LIQ) AS "VLRTOT", SUM(ITE.VLRDESC) AS "VLRDESC", SUM(ITE.VLRTOT_LIQ) AS "VLRTOT_LIQ", SUM(ITE.CUSTO_TOTAL) AS "CUSTO_TOTAL", (SUM(ITE.VLRTOT_LIQ) -SUM(ITE.CUSTO_TOTAL)) AS "VLR_MARGEM", ((SUM(ITE.VLRTOT_LIQ) / DECODE(SUM(ITE.CUSTO_TOTAL),0,1,SUM(ITE.CUSTO_TOTAL)))-1)*100 AS "PERC_MARKUP", (SELECT COUNT(*) FROM TGFPRO WHERE CODGRUPOPROD IN :P_CODGRUPOPROD AND MARCA IN :P_MARCA ) AS "QTD_MIX_TOT", (SELECT COUNT(DISTINCT CODPROD) FROM AD_CAMPANHAS_ITE WHERE CODGRUPOPROD IN :P_CODGRUPOPROD AND MARCA IN :P_MARCA AND DTFATUR >= :PERIODO.INI AND DTFATUR <= :PERIODO.FIN AND CODVEND = ITE.CODVEND) AS "QTD_MIX_VDA", (SELECT COUNT(DISTINCT CODPROD) FROM AD_CAMPANHAS_ITE WHERE CODGRUPOPROD IN :P_CODGRUPOPROD AND MARCA IN :P_MARCA AND DTFATUR >= :PERIODO.INI AND DTFATUR <= :PERIODO.FIN AND CODVEND = ITE.CODVEND) /DECODE((SELECT COUNT(*) FROM TGFPRO WHERE CODGRUPOPROD IN :P_CODGRUPOPROD AND MARCA IN :P_MARCA),0,1,(SELECT COUNT(*) FROM TGFPRO WHERE CODGRUPOPROD IN :P_CODGRUPOPROD AND MARCA IN :P_MARCA))*100 AS "PERC_MIX", (SELECT COUNT(*) FROM TGFRPV RPV WHERE RPV.CODVEND = ITE.CODVEND AND NOT EXISTS (SELECT 1 FROM TGFPAR PAR WHERE PAR.CODPARC = RPV.CODPARC AND PAR.ATIVO = 'S' AND PAR.CODVEND = RPV.CODVEND))+ (SELECT COUNT(*) FROM TGFPAR PAR WHERE PAR.CODVEND = ITE.CODVEND AND PAR.ATIVO = 'S' AND NOT EXISTS (SELECT 1 FROM TGFRPV RPV WHERE RPV.CODPARC = PAR.CODPARC AND RPV.CODVEND = PAR.CODVEND)) AS "QTD_PARC_TOT", (SELECT COUNT(DISTINCT ITE2.CODPARC) FROM AD_CAMPANHAS_ITE ITE2 WHERE ITE2.CODGRUPOPROD IN :P_CODGRUPOPROD AND ITE2.MARCA IN :P_MARCA AND ITE2.DTFATUR >= :PERIODO.INI AND ITE2.DTFATUR <= :PERIODO.FIN AND ITE2.CODVEND = ITE.CODVEND) AS "QTD_PARC_VDA", (SUM(ITE.VLRTOT_LIQ) /(SELECT COUNT(DISTINCT ITE2.CODPARC) FROM AD_CAMPANHAS_ITE ITE2 WHERE ITE2.CODGRUPOPROD IN :P_CODGRUPOPROD AND ITE2.MARCA IN :P_MARCA AND TO_DATE(ITE2.DTFATUR,'DD/MM/YY') >= :PERIODO.INI AND TO_DATE(ITE2.DTFATUR,'DD/MM/YY') <= :PERIODO.FIN AND ITE2.CODVEND = ITE.CODVEND)) AS "TICKETCLI", (SELECT COUNT(DISTINCT ITE2.CODPARC) FROM AD_CAMPANHAS_ITE ITE2 WHERE ITE2.CODGRUPOPROD IN :P_CODGRUPOPROD AND ITE2.MARCA IN :P_MARCA AND ITE2.DTFATUR >= :PERIODO.INI AND ITE2.DTFATUR <= :PERIODO.FIN AND ITE2.CODVEND = ITE.CODVEND) AS "QTD_PARC_VDA", (SELECT COUNT(DISTINCT ITE2.CODPARC) FROM AD_CAMPANHAS_ITE ITE2 WHERE ITE2.CODGRUPOPROD IN :P_CODGRUPOPROD AND ITE2.MARCA IN :P_MARCA AND ITE2.DTFATUR >= :PERIODO.INI AND ITE2.DTFATUR <= :PERIODO.FIN AND ITE2.CODVEND = ITE.CODVEND) / ((SELECT COUNT(*) FROM TGFRPV RPV WHERE RPV.CODVEND = ITE.CODVEND AND NOT EXISTS (SELECT 1 FROM TGFPAR PAR WHERE PAR.CODPARC = RPV.CODPARC AND PAR.ATIVO = 'S' AND PAR.CODVEND = RPV.CODVEND))+ (SELECT COUNT(*) FROM TGFPAR PAR WHERE PAR.CODVEND = ITE.CODVEND AND PAR.ATIVO = 'S' AND NOT EXISTS (SELECT 1 FROM TGFRPV RPV WHERE RPV.CODPARC = PAR.CODPARC AND RPV.CODVEND = PAR.CODVEND)))*100 AS "PERC_PARC", SUM(ITE.QTDNEG) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN)) AS "QTDNEG_DIA", SUM(ITE.PESO_TOT) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN)) AS "PESO_DIA", SUM(ITE.VLRTOT_LIQ) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN)) AS "VALOR_DIA", (SUM(ITE.QTDNEG) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN))) * AD_DIAS_UTEIS(SYSDATE-30,SYSDATE) AS "QTDNEG_30", (SUM(ITE.PESO_TOT) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN))) * AD_DIAS_UTEIS(SYSDATE-30,SYSDATE) AS "PESO_30", (SUM(ITE.VLRTOT_LIQ) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN))) * AD_DIAS_UTEIS(SYSDATE-30,SYSDATE) AS "VALOR_30", sankhya.AD_FC_CONFIGCAMP (STP_GET_CODUSULOGADO, :PERIODO.INI , :PERIODO.FIN, (SELECT (listagg(CODGRUPOPROD,',') within group (order by CODGRUPOPROD)) FROM TGFGRU WHERE CODGRUPOPROD IN :P_CODGRUPOPROD), (SELECT (listagg(DESCRICAO,',') within group (order by DESCRICAO)) FROM TGFMAR WHERE DESCRICAO IN :P_MARCA), (SELECT (listagg(CODVEND,',') within group (order by CODVEND)) FROM TGFVEN WHERE CODVEND IN :P_CODVEND)) AS "VALIDACAO", (SELECT COUNT(DISTINCT NUNOTA) FROM AD_CAMPANHAS_ITE ITE2 WHERE 0 = 0 AND ITE2.DTFATUR >= :PERIODO.INI AND ITE2.DTFATUR <= :PERIODO.FIN AND ITE2.CODGRUPOPROD IN :P_CODGRUPOPROD AND ITE2.MARCA IN :P_MARCA AND ITE2.CODVEND = ITE.CODVEND AND NUNOTA >= 0) "QTDVENDAS", SUM(ITE.VLRTOT_LIQ) / (SELECT COUNT(DISTINCT NUNOTA) FROM AD_CAMPANHAS_ITE ITE2 WHERE 0 = 0 AND TO_DATE(ITE2.DTFATUR,'DD/MM/YY') >= :PERIODO.INI AND TO_DATE(ITE2.DTFATUR,'DD/MM/YY') <= :PERIODO.FIN AND ITE2.CODGRUPOPROD IN :P_CODGRUPOPROD AND ITE2.MARCA IN :P_MARCA AND ITE2.CODVEND = ITE.CODVEND AND NUNOTA >=0) AS "TICKETMEDIO", (SELECT COUNT(DISTINCT NUNOTA) FROM AD_CAMPANHAS_ITE ITE2 WHERE 0 = 0 AND TO_DATE(ITE2.DTFATUR,'DD/MM/YY') >= :PERIODO.INI AND TO_DATE(ITE2.DTFATUR,'DD/MM/YY') <= :PERIODO.FIN AND ITE2.CODGRUPOPROD IN :P_CODGRUPOPROD AND ITE2.MARCA IN :P_MARCA AND ITE2.CODVEND = ITE.CODVEND AND NUNOTA>=0) AS "QTD_PEDIDOS" FROM AD_CAMPANHAS_ITE ITE WHERE 0 = 0 AND TO_DATE(ITE.DTFATUR,'DD/MM/YY') >= :PERIODO.INI AND TO_DATE(ITE.DTFATUR,'DD/MM/YY') <= :PERIODO.FIN AND TO_CHAR(DTFATUR,'DD/MM/YYYY HH24:MI') >= TO_CHAR(:DTINI,'DD/MM/YYYY HH24:MI') AND TO_CHAR(DTFATUR,'DD/MM/YYYY HH24:MI') <= TO_CHAR(:DTFIN,'DD/MM/YYYY HH24:MI') AND ITE.CODGRUPOPROD IN :P_CODGRUPOPROD AND ITE.CODVEND IN :P_CODVEND AND ITE.MARCA IN :P_MARCA AND ITE.CODPROD IN NVL(:P_CODPROD,ITE.CODPROD) AND ITE.CODTIPPARC IN NVL(:P_CODTIPPARC,ITE.CODTIPPARC) AND NUNOTA >= 0 GROUP BY ITE.CODVEND, ITE.APELIDO, GERENTE ORDER BY ITE.APELIDO
Maicon Scapatici
Post mais votado
25/09/2018
Você já identificou onde esta o erro, correto?
Você poderia colocar a parte do código onde encontrou o erro?
Cara, confesso que tentei ler seu código, mas mais me confundiu que tudo. rsrsr
Tem algumas tratativas que podem ser feitas para uma divisão por zero, mas acho que seria mais interessante analisarmos o ponto do código onde esta acontecendo o problema.
Atenciosamente,
Alex Lekao
Mais Posts
26/09/2018
Maicon Scapatici
Eis a tabela que estou olhando agora, aonde provavelmente está o erro.
SELECT ITE.CODVEND, ITE.CODPROD, ITE.DESCRPROD, ITE.CODGRUPOPROD, ITE.DESCRGRUPOPROD, ITE.MARCA, SUM(ITE.QTDNEG) AS "QTDNEG_TOT", SUM(ITE.PESO_TOT) AS "PESO_TOT", SUM(ITE.VLRTOT_LIQ) / DECODE(SUM(ITE.QTDNEG),0,1,SUM(ITE.QTDNEG)) AS "VLRUNIT", SUM(ITE.VLRTOT_LIQ) AS "VLRTOT", SUM(ITE.VLRDESC) AS "VLRDESC", SUM(ITE.CUSTO_TOTAL) AS "CUSTO_TOTAL", SUM(ITE.CUSTO_TOTAL) / DECODE(SUM(ITE.QTDNEG),0,1,SUM(ITE.QTDNEG)) AS "CUSTO_UNIT", ((SUM(ITE.VLRTOT_LIQ) / DECODE(SUM(ITE.CUSTO_TOTAL),0,1,SUM(ITE.CUSTO_TOTAL)))-1)*100 AS "PERC_MARKUP", (SUM(ITE.VLRTOT_LIQ) -SUM(ITE.CUSTO_TOTAL)) AS "VLR_MARGEM", (SELECT COUNT(DISTINCT ITE2.CODPARC) FROM AD_CAMPANHAS_ITE ITE2 WHERE ITE2.CODGRUPOPROD IN :P_CODGRUPOPROD AND ITE2.MARCA IN :P_MARCA AND ITE2.CODPROD = ITE.CODPROD AND ITE2.DTFATUR >= :PERIODO.INI AND ITE2.DTFATUR <= :PERIODO.FIN AND ITE2.CODVEND = ITE.CODVEND) AS "QTD_PARC_VDA", (SELECT COUNT(DISTINCT ITE2.CODPARC) FROM AD_CAMPANHAS_ITE ITE2 WHERE ITE2.CODGRUPOPROD IN :P_CODGRUPOPROD AND ITE2.MARCA IN :P_MARCA AND ITE2.CODPROD = ITE.CODPROD AND ITE2.DTFATUR >= :PERIODO.INI AND ITE2.DTFATUR <= :PERIODO.FIN AND ITE2.CODVEND = ITE.CODVEND) / ((SELECT COUNT(*) FROM TGFRPV RPV WHERE RPV.CODVEND = ITE.CODVEND AND NOT EXISTS (SELECT 1 FROM TGFPAR PAR WHERE PAR.CODPARC = RPV.CODPARC AND PAR.CODVEND = RPV.CODVEND))+ (SELECT COUNT(*) FROM TGFPAR PAR WHERE PAR.CODVEND = ITE.CODVEND AND NOT EXISTS (SELECT 1 FROM TGFRPV RPV WHERE RPV.CODPARC = PAR.CODPARC AND RPV.CODVEND = PAR.CODVEND)))*100 AS "PERC_PARC", SUM(ITE.QTDNEG) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN)) AS "QTDNEG_DIA", SUM(ITE.PESO_TOT) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN)) AS "PESO_DIA", SUM(ITE.VLRTOT_LIQ) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN)) AS "VALOR_DIA", (SUM(ITE.QTDNEG) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN))) * AD_DIAS_UTEIS(SYSDATE-30,SYSDATE) AS "QTDNEG_30", (SUM(ITE.PESO_TOT) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN))) * AD_DIAS_UTEIS(SYSDATE-30,SYSDATE) AS "PESO_30", (SUM(ITE.VLRTOT_LIQ) / DECODE(AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN),0,1,AD_DIAS_UTEIS(:PERIODO.INI,:PERIODO.FIN))) * AD_DIAS_UTEIS(SYSDATE-30,SYSDATE) AS "VALOR_30" FROM AD_CAMPANHAS_ITE ITE WHERE 0 = 0 AND TO_DATE(ITE.DTFATUR,'DD/MM/YY') >= :PERIODO.INI AND TO_DATE(ITE.DTFATUR,'DD/MM/YY') <= :PERIODO.FIN AND TO_CHAR(DTFATUR,'DD/MM/YYYY HH24:MI') >= TO_CHAR(:DTINI,'DD/MM/YYYY HH24:MI') AND TO_CHAR(DTFATUR,'DD/MM/YYYY HH24:MI') <= TO_CHAR(:DTFIN,'DD/MM/YYYY HH24:MI') AND ITE.CODVEND IN :P_CODVEND AND ITE.CODPROD IN NVL(:P_CODPROD,ITE.CODPROD) AND ITE.CODGRUPOPROD IN :P_CODGRUPOPROD AND ITE.MARCA IN :P_MARCA AND ITE.CODVEND IN :ARG_CODVEND AND ITE.CODTIPPARC IN NVL(:P_CODTIPPARC,ITE.CODTIPPARC) GROUP BY ITE.CODVEND, ITE.CODPROD, ITE.DESCRPROD, ITE.CODGRUPOPROD, ITE.DESCRGRUPOPROD, ITE.MARCA ORDER BY ITE.CODPROD
26/09/2018
Maicon Scapatici
26/09/2018
Alex Lekao
Entendi.
Mas imagino que essa questão precisa ser tratada no código, porque isso vai acontecer novamente.
Sugiro nas operações onde tem divisão, você adicionar uma tratativa para divisão por zero.
Com isso você já resolve quando houver esse problema novamente.
Se não me engano com a função NULLIF você consegue tratar essa questão, você o coloca no divisor.
Atenciosamente,
26/09/2018
Maicon Scapatici
Obrigado pela sugestão! Quando eu tiver feito e testado coloco a implementação aqui para você dar uma olhada.
26/09/2018
Alex Lekao
Será interessante para conhecimento de alguém que estiver passando pelo mesmo problema.
Uma coisa que me equivoquei, NULLIF é SLQ Server, para Oracle deve ter algo similar, eu não conheço, me confundi com o banco que você estava no tópico.
Clique aqui para fazer login e interagir na Comunidade :)