IF extremamente duvidoso

Este forum é dedicado a códigos errados que se encontram por aí, ou seja, coisas que não se deve fazer de jeito nenhum! Não coloque neste forum dúvidas! (apenas situações bizarras do nosso dia a dia :-)
Responder
Diego_Mello
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 229
Registrado em: Sex, 05 Set 2008 2:59 pm
Localização: Igrejinha - RS
Diego Mello
Igrejinha - RS
www.twitter.com/diegolmello

Encontrei isso hoje de manhã...

Selecionar tudo

function CF_TOTAL_PARESFormula return Number is
  vtotal_pares  number(8);
begin
  if :pares_linha > 0 then
    vtotal_pares := :pares_linha;
  else
    vtotal_pares := 0;
  end if;  
  if vtotal_pares = 0 then
    return(0);
  else
    return(vtotal_pares);
  end if;  
end;       
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Aparentemente, a pessoa que estava testando queria que quando fosse < 0 fosse atribuido o valor 0.
O que é mais legal não é ter outro if e sim o outro ser completamente dispensável.
Para que fazer um simples return(v_total_pares).
se pode ver se for 0 a variavel, retornar 0:

Selecionar tudo

  if vtotal_pares = 0 then
    return(0);
  else
    return(vtotal_pares);
  end if;  
Diego_Mello
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 229
Registrado em: Sex, 05 Set 2008 2:59 pm
Localização: Igrejinha - RS
Diego Mello
Igrejinha - RS
www.twitter.com/diegolmello

Não é nem a questão de evitar pares negativos.
Pensando um pouco mais em regra de negócio, é impossível ter pares negativos.
Logo, a solução seria muito, mas MUITO mais simples.

Selecionar tudo

 RETURN NVL(:pares_linha, 0);
E se quiser simplificar mais ainda, basta colocar o NVL direto na query :P
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Pelo que eu entendi, se o número for negativo, tem que ir pra zero.

Então algo assim:

Selecionar tudo

IF :pares_linha <= 0  --Se for menor que zero, retorna zero.
THEN return 0;
ELSE return :pares_linha;   --Senão, retorna o próprio numero.
END IF;
ou, dá pra fazer em uma linha só:

Selecionar tudo

RETURN  DECODE ( SIGN(:pares_linha), -1, 0, :pares_linha)
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

é impossível ter pares negativos.
tem razao :-D
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Verdade. Naturalmente não deveria existir negativo. Mas vindo desse if aí, alguém ainda duvida existir pares negativos???
hehehehehhe.
Diego_Mello
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 229
Registrado em: Sex, 05 Set 2008 2:59 pm
Localização: Igrejinha - RS
Diego Mello
Igrejinha - RS
www.twitter.com/diegolmello

auheuaheuahe :P
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Interessante quanta interpretação pode gerar um código duvidoso SEM comentários... É ai que a gente perde tempo, tentando adivinhar o que se passa na cabeça do cara que fez.. :roll:
Responder
  • Informação
  • Quem está online

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