Divisão

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
INICIANTE_ORACLE
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 22
Registrado em: Qua, 05 Jan 2011 3:19 pm
Localização: ARAÇATUBA

Este trecho de código esta com Bug :

Selecionar tudo

 TRUNC(((SUM(RESUMO_TOTAL_SERVICO ) / SUM(TOTAL_VENDEDOR))),2) PRODUCAO_TOTAL  
Apresenta este erro:
ORA-01476: divisor is equal to zero
01476. 00000 - "divisor is equal to zero"

O problema é quem nem sempre haverá valores maior que 0 para o calculo da divisão, por isso ele reclama que não é possível dividir por zero.

Tem como solucionar este erro ?
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

TOTAL_VENDEDOR
RESUMO_TOTAL_SERVICO
algum valor desse pode estar vindo nulo ou zero ne..
vê se a função NVL te atende
INICIANTE_ORACLE
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 22
Registrado em: Qua, 05 Jan 2011 3:19 pm
Localização: ARAÇATUBA

já tentei NVL e nada. O Erro é o Mesmo.
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

o problema é esse? tem zero ou nulo nessas colunas?
você fez um select e viu isso?
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

Selecionar tudo

 TRUNC(((SUM(RESUMO_TOTAL_SERVICO) / NVL(SUM(TOTAL_VENDEDOR),1)),2) PRODUCAO_TOTAL
INICIANTE_ORACLE
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 22
Registrado em: Qua, 05 Jan 2011 3:19 pm
Localização: ARAÇATUBA

Selecionar tudo

CASE 
   WHEN SUM(TOTAL_VENDEDOR) > 0 AND SUM(RESUMO_TOTAL_SERVICO ) > 0 THEN
      TRUNC(((SUM(RESUMO_TOTAL_SERVICO ) / SUM(TOTAL_VENDEDOR))),2)  
    ELSE 0
 END PRODUCAO_TOTAL, 
Fiz isto e deu certo.
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Brow, o case é uma das opções q você tem nesse caso, uma outra seria usar um decode, como nos exemplos abaixo...

Selecionar tudo

SQL> WITH tbl_glufke AS
  2  (
  3    SELECT 50 RESUMO_TOTAL_SERVICO,  5 TOTAL_VENDEDOR FROM DUAL
  4    UNION ALL
  5    SELECT 50 RESUMO_TOTAL_SERVICO,  5 TOTAL_VENDEDOR FROM DUAL
  6  )
  7  SELECT NVL(TRUNC(((SUM(RESUMO_TOTAL_SERVICO ) / DECODE(SUM(TOTAL_VENDEDOR),0,NULL,SUM(TOTAL_VENDEDOR)) )),2),0) PRODUCAO_TOTAL
  8    FROM tbl_glufke;

PRODUCAO_TOTAL
--------------
            10

Selecionar tudo

SQL> WITH tbl_glufke AS
  2  (
  3    SELECT 50 RESUMO_TOTAL_SERVICO,  0 TOTAL_VENDEDOR FROM DUAL
  4    UNION ALL
  5    SELECT 50 RESUMO_TOTAL_SERVICO,  0 TOTAL_VENDEDOR FROM DUAL
  6  )
  7  SELECT NVL(TRUNC(((SUM(RESUMO_TOTAL_SERVICO ) / DECODE(SUM(TOTAL_VENDEDOR),0,NULL,SUM(TOTAL_VENDEDOR)) )),2),0) PRODUCAO_TOTAL
  8    FROM tbl_glufke;

PRODUCAO_TOTAL
--------------
             0

Selecionar tudo

SQL> WITH tbl_glufke AS
  2  (
  3    SELECT 50 RESUMO_TOTAL_SERVICO,  5 TOTAL_VENDEDOR FROM DUAL
  4    UNION ALL
  5    SELECT 50 RESUMO_TOTAL_SERVICO,  0 TOTAL_VENDEDOR FROM DUAL
  6  )
  7  SELECT NVL(TRUNC(((SUM(RESUMO_TOTAL_SERVICO ) / DECODE(SUM(TOTAL_VENDEDOR),0,NULL,SUM(TOTAL_VENDEDOR)) )),2),0) PRODUCAO_TOTAL
  8    FROM tbl_glufke;

PRODUCAO_TOTAL
--------------
            20
[]s!!!
alecio
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Sáb, 05 Fev 2011 12:20 am
Localização: Pato Branco
Ale

Selecionar tudo

TRUNC(((SUM(RESUMO_TOTAL_SERVICO ) / SUM(TOTAL_VENDEDOR))),2) PRODUCAO_TOTAL  
Tente com o DIVEZERO
EXEMPLO:

Selecionar tudo

DIVEZERO(RESUMO_TOTAL_SERVICO,TOTAL_VENDEDOR)
em vez de você utilizar a barra utiliza a virgula.
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Alecio, nunca vi nada a respeito desse comando, você está usando qual versão do banco???
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

alecio escreveu:

Selecionar tudo

TRUNC(((SUM(RESUMO_TOTAL_SERVICO ) / SUM(TOTAL_VENDEDOR))),2) PRODUCAO_TOTAL  
Tente com o DIVEZERO

Selecionar tudo

EXEMPLO: DIVEZERO(RESUMO_TOTAL_SERVICO,TOTAL_VENDEDOR)
em vez de você utilizar a barra utiliza a virgula.
manda o código dessa sua função DIVEZERO
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 14 visitantes