COBOL - Statement operations - SIZE ERROR phrases



Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

COBOL - Statement operations - SIZE ERROR phrases
Enterprise COBOL for z/OS, V4.2, Language Reference

Uma condição de erro de tamanho pode ocorrer de quatro maneiras diferentes:

  • Quando o valor absoluto do resultado de uma avaliação aritmética, após o alinhamento do ponto decimal, exceder o maior valor que pode estar contido no campo de resultado.
  • Quando ocorre a divisão por zero.
  • Quando o resultado de uma declaração aritmética é armazenado em um campo de data em janela e o ano do resultado fica fora da janela do século.
    Por exemplo, dado YEARWINDOW (1940) (que especifica uma janela de século de 1940-2039), a seguinte instrução SUBTRACT causa um erro de tamanho:
           01  WINDOWED-YEAR DATE FORMAT YY PICTURE 99
                                           VALUE IS 50.
           ...
               SUBTRACT 20 FROM WINDOWED-YEAR
                        ON SIZE ERROR imperative-statement

    O erro de tamanho ocorre porque o resultado da subtração, um campo de data em janela, tem um valor efetivo do ano de 1930, que fica fora da janela do século.
    Para obter detalhes sobre como os campos de data em janela são tratados como se fossem convertidos para o formato de data expandida, consulte Subtraction that involves date fields.

    Para obter mais informações sobre como erros de tamanho podem ocorrer ao usar campos de data, consulte Storing arithmetic results that involve date fields.

  • Em uma expressão exponencial, conforme indicado na tabela a seguir:

Tabela 1. Condições de erro do tamanho da exponenciação

Erro de tamanho Ação tomada quando uma cláusula SIZE ERROR está presente Ação tomada quando uma cláusula SIZE ERROR não está presente
Zero elevado a zero potência O imperativo SIZE ERROR é executado O valor retornado é 1 e uma mensagem é emitida.
Zero aumentado para um número negativo O imperativo SIZE ERROR é executado. O programa é encerrado de forma anormal.
Um número negativo elevado a uma potência fracionária O imperativo SIZE ERROR é executado. O valor absoluto da base é usado e uma mensagem é emitida.

A condição de erro de tamanho se aplica apenas aos resultados finais, não a nenhum resultado intermediário.

Se o identificador resultante for definido com o uso BINARY, COMPUTATIONAL, COMPUTATIONAL-4 ou COMPUTATIONAL-5, o maior valor que o item de dados resultante pode conter é o valor implícito na seqüência de caracteres PICTURE decimal do item, independentemente da opção do compilador TRUNC em vigor.

Se a frase ROUNDED for especificada, o arredondamento ocorrerá antes da verificação de erro de tamanho.

Quando ocorre um erro de tamanho, a ação subseqüente do programa depende se a frase ON SIZE ERROR está especificada.

Se a frase ON SIZE ERROR não for especificada e ocorrer uma condição de erro de tamanho, as regras de truncamento serão aplicadas e o valor do identificador resultante afetado será calculado.

Se a frase ON SIZE ERROR for especificada e ocorrer uma condição de erro de tamanho, o valor do identificador resultante afetado pelo erro de tamanho não será alterado; isto é, os resultados do erro não são colocados no identificador de recebimento.
Após a conclusão da execução da operação aritmética, a instrução imperativa na frase ON SIZE ERROR é executada, o controle é transferido para o final da instrução aritmética e a frase NOT ON SIZE ERROR, se especificada, é ignorada.

Para instruções ADD CORRESPONDING e SUBTRACT CORRESPONDING, se uma operação aritmética individual causar uma condição de erro de tamanho, a instrução imperativa ON SIZE ERROR não será executada até que todas as adições ou subtrações individuais tenham sido concluídas.

Se a frase NOT ON SIZE ERROR tiver sido especificada e, após a execução de uma operação aritmética, uma condição de erro de tamanho não existir, a frase NOT ON SIZE ERROR será executada.

Quando as frases ON SIZE ERROR e NOT ON SIZE ERROR são especificadas e a instrução na frase executada não contém nenhuma transferência explícita de controle, se necessário, uma transferência implícita de controle é feita após a execução da frase para o final da declaração aritmética.



© Copyright IBM Corp.