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
ouCOMP-5
. -
Se
ON SIZE ERROR
não for especificado, o COBOL trunca o valor para caber no campo. -
No caso de
CORRESPONDING ADD
ouSUBTRACT
, 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.