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-4ouCOMP-5. -
Se
ON SIZE ERRORnão for especificado, o COBOL trunca o valor para caber no campo. -
No caso de
CORRESPONDING ADDouSUBTRACT, o erro só é tratado depois que todas as operações forem concluídas.
🧠 Dicas práticas
-
Use
ON SIZE ERRORsempre que estiver lidando com campos de valor fixo e operações críticas. -
Combine com
ROUNDEDpara 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.