Tratamento da exceção CX_SY_ZERODIVIDE

Ao escrever um cálculo em nosso código que envolve divisão, uma regra é garantir que não teremos valores zerados no momento do cálculo para não ocorrer um dump.

Abaixo um exemplo de código onde uma divisão por 0 não foi tratada corretamente:

DATA: v_resultado TYPE p,
      v_valor_1   TYPE p,
      v_valor_2   TYPE p.

v_valor_1 = 10.
v_valor_2 = 0.

v_resultado = v_valor_1 / v_valor_2.


Ao ser executado, o código gerou dump:


Caso o tratamento dos valores não seja realizado antes, uma maneira de evitar o dump é tratar a exceção no momento do cálculo com comando CATCH SYSTEM-EXCEPTIONS:

DATA: v_resultado TYPE p,
      v_valor_1   TYPE p,
      v_valor_2   TYPE p.

v_valor_1 = 10.
v_valor_2 = 0.

CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 4
                                   OTHERS = 8.
  v_resultado = v_valor_1 / v_valor_2.
ENDCATCH.

Fazendo desta forma, o dump não ocorrerá e o resultado será 0.

Paulo Ramos

Consultor SAP ABAP | PI / PO com experiência em desenvolvimento de software e conhecimento em diversas linguagens de programação.

Postar um comentário

Postagem Anterior Próxima Postagem