none
Função para validar uma expressão aritmética RRS feed

  • Pergunta

  • Bom galera, estou precisando fazer uma função que faça a validação de uma operação aritmética.

    Ex: 1 + 1 (3*7 -1

    O exemplo acima está faltando fechar o ), como eu faria para validar se a expressão está correta?

    No aguardo,

    Ruberlei.

    quinta-feira, 4 de outubro de 2012 01:11

Respostas

  • O SQL Server (assim como outros bancos) não possui recursos nativos para este tipo de verificação (matemática).

    Então, não seria possível (a não ser com muito trabalho braçal em T-Sql) proteger a expressão a tal ponto de informar ao usuário: "Olha, está faltando fechar o parêntesis."

    Podem haver uma infinidade de erros em uma expressão aritmética como esta. Aliás, não sei se percebeu, mas está faltando um operador matemático antes da abertura do parêntesis.

    Esta "validação", no mundo perfeito, teria que avisar que está faltando um "operador matemático antes da abertura do primeiro parêntesis" (sim, do primeiro, pois podem existir diversos parêntesis).

    Impossível! (A não ser que se queira definir uma lógica simples - Que sempre será complexa em T-Sql).

    O que se pode fazer é validar a expressão procurando resgatar o resultado dela, e ponto final. Consequentemente, se o SQL não conseguir resolver a expressão, é porque existe "algum" erro (seja qual for). E neste caso você pode "tratar" este erro de alguma maneira (por exemplo, jogando uma informação para o usuário de que a expressão está incorreta).

    Segue exemplo:

    Begin Try
       Exec ('Select 1 + 1 + (3 * 7 - 1')
    End Try
    Begin Catch
      Print 'Existe um erro na fórmula. Verifique!'
    End Catch

    No exemplo acima, como está faltando o fechamento do parêntesis dentro da expressão matemática, o SQL não consegue resolver a fórmula e, consequentemente, "entra" no bloco Catch.

    Ir além disso é muito complicado e nem sei se valeria à pena.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Sugerido como Resposta Roberson Ferreira _ quinta-feira, 4 de outubro de 2012 11:15
    • Marcado como Resposta Ruberlei quinta-feira, 4 de outubro de 2012 11:53
    quinta-feira, 4 de outubro de 2012 11:15