A cláusula ON SIZE ERROR no COBOL é usada para capturar situações em que o resultado de uma operação aritmética ultrapassa a capacidade do campo que o receberá, evitando que dados inválidos sejam gravados.

📌 Para que serve

  • Evitar perda ou corrupção de dados em cálculos que excedem o tamanho do campo de destino.

  • Tratar erros de divisão por zero e estouros de capacidade em campos numéricos.

  • Proteger o valor original de um campo caso a operação falhe.

🧾 Sintaxe básica

ADD valor-1 TO valor-2
    ON SIZE ERROR
        instruções-em-caso-de-erro
    NOT ON SIZE ERROR
        instruções-se-não-houver-erro.

A cláusula ON SIZE ERROR pode ser usada com os comandos:

  • ADD

  • SUBTRACT

  • MULTIPLY

  • DIVIDE

  • COMPUTE

✅ Exemplo prático

01 VALOR-1     PIC 9(3) VALUE 999.
01 VALOR-2     PIC 9(3) VALUE 10.
01 RESULTADO   PIC 9(3).

ADD VALOR-1 TO VALOR-2 GIVING RESULTADO
    ON SIZE ERROR
        DISPLAY "Erro de tamanho! Cálculo excedeu o limite."
    NOT ON SIZE ERROR
        DISPLAY "Resultado: " RESULTADO.

📌 O resultado de 999 + 10 (1009) não cabe em um campo PIC 9(3).
✅ Com ON SIZE ERROR, a variável RESULTADO não é alterada e o erro é tratado.

⚙️ Como funciona internamente

Situação Resultado com SIZE ERROR Resultado sem SIZE ERROR
Soma que ultrapassa o campo Erro tratado e campo intacto Valor truncado ou inválido
Divisão por zero Erro tratado Pode causar comportamento indefinido
Subtração de datas fora da janela de século Erro tratado Resultado inválido
Campo com PICTURE pequeno demais Erro tratado Valor corrompido/truncado

⚠️ Regras importantes

  • O erro é detectado apenas no resultado final da operação, não em cálculos intermediários.

  • Quando ROUNDED é usado, o arredondamento acontece antes da verificação de erro de tamanho.

  • A cláusula só afeta campos numéricos com USAGE IS DISPLAY, BINARY, COMP, COMP-4 ou COMP-5.

  • Se ON SIZE ERROR não for especificado, o COBOL trunca o valor para caber no campo.

  • No caso de CORRESPONDING ADD ou SUBTRACT, o erro só é tratado depois que todas as operações forem concluídas.

🧠 Dicas práticas

  • Use ON SIZE ERROR sempre que estiver lidando com campos de valor fixo e operações críticas.

  • Combine com ROUNDED para aumentar a precisão e segurança:

COMPUTE RESULTADO ROUNDED = VALOR-1 * VALOR-2
    ON SIZE ERROR
        DISPLAY "Erro: valor excede o limite.".
  • Em cálculos com datas com janela (ex: DATE FORMAT YY), verifique se o valor resultante está dentro da janela definida (ex: 1940 a 2039).

✅ Conclusão

A cláusula ON SIZE ERROR é fundamental para garantir a robustez e integridade de sistemas COBOL. Ao prever e tratar estouros de campo, evita comportamentos inesperados e torna o programa mais confiável. Seu uso é especialmente indicado em cálculos financeiros, datas sensíveis e operações críticas com variáveis pequenas ou fixas.