none
Ajuda com function - trazer todos os registros independente da busca RRS feed

  • Pergunta

  • Bom dia!
    Pessoal eu tenho uma function, que eu envio 3 parametros de busca.
    Porém, existe um caso... que esta me complicando um pouco e depois de tanto tentar, resolvi pedir ajuda.

    Eu coloco como paramento ano, empresa e centro de custo.

    Tudo funciona bem com ano e empresa, porém, o centro de custo não é sempre obrigatório para buscar.

    Dessa forma:

    select Valor, CentroCusto from Rotinas where ano=@ano and Empresa=@Empresa and CentroCusto = @centroCusto
    
    


    Funciona bem, quando eu envio o parametro para trazer por centro de custo, mas, pode ocorrer que eu queira trazer todos os valores independente do centro de custo, só que eu queria aproveitar a mesma function não queria criar outra.

    Sei que tem esse tipo de forma para resolver (caso houvesse um valor default):
    select Valor, CentroCusto from Rotinas where ano=@ano and Empresa=@Empresa and (CentroCusto = @centroCusto or @centroCusto = '0')

    Porém, não vi como seria trazer todos independente do centroCusto (existindo um valor ou não).

    Alguém tem uma sugestão?

    terça-feira, 2 de outubro de 2018 13:21

Respostas

  • Paulo,

    Você está passando o valor do @CentroCusto como vazio e não como null.

    Experimente passar Ex: select * from FN_FECHAMENTO_MES('2018','01','NULL)  ou mudar a lógica da function para tratar o vazio e não o null.


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    • Marcado como Resposta Paulo.Sérgio terça-feira, 2 de outubro de 2018 14:24
    terça-feira, 2 de outubro de 2018 14:17

Todas as Respostas

  • Olá Paulo,

    Você pode usar dessa maneira:

    select Valor, CentroCusto from Rotinas where ano=@ano and Empresa=@Empresa and (CentroCusto = @centroCusto or @centroCusto IS NULL)

    Se você passar um valor, ele cai no 'CentroCusto = @CentroCusto'. Se não passar ele cai no OR

    Lembrando que apesar de ser factível, você precisa analisar performance disso ok? O 'OR' nem sempre é um bom amigo.. rs


    Espero ter ajudado!


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    terça-feira, 2 de outubro de 2018 13:58
  • Primeiramente, muito obrigado pela ajuda!

    EU testei, se eu colocar um valor no centro de custo, ele traz corretamente.
    Ex: select * from FN_FECHAMENTO_MES('2018','01','02')

    Porém, se eu envio sem nada:
    Ex: select * from FN_FECHAMENTO_MES('2018','01','')
    Ele não traz nada.

    O engraçado é que se eu coloco :

    select Valor, CentroCusto from Rotinas where ano=@ano and Empresa=@Empresa and (CentroCusto = @centroCusto or @centroCusto IS NOT NULL)

    O comportamento é ao contrário, se enviar o centro de custo, não retorna nada. 
    Se não enviar o centro de custo, ele retorna tudo.

    O que será que esta errado na lógica?


    terça-feira, 2 de outubro de 2018 14:13
  • Paulo,

    Você está passando o valor do @CentroCusto como vazio e não como null.

    Experimente passar Ex: select * from FN_FECHAMENTO_MES('2018','01','NULL)  ou mudar a lógica da function para tratar o vazio e não o null.


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    • Marcado como Resposta Paulo.Sérgio terça-feira, 2 de outubro de 2018 14:24
    terça-feira, 2 de outubro de 2018 14:17
  • Era isso mesmo, vou tratar essa entrada, para caso não seja número considere nulo! rs

    Obrigado pela ajuda, um ótimo dia para você!
    terça-feira, 2 de outubro de 2018 14:24
  • Que bom que funcionou!

    Estamos aqui para nos ajudarmos!

    Ótimo dia pra você também!

    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    terça-feira, 2 de outubro de 2018 14:29