Menu

COBOL - A Cláusula OCCURS com DEPENDING ON


Se você não souber antes do tempo de execução quantas vezes um elemento de tabela ocorre, defina uma tabela de comprimento variável. Para isso, use a cláusula OCCURS DEPENDING ON (ODO).

X OCCURS 1 TO 10 TIMES DEPENDING ON Y

No exemplo acima, X é chamado de assunto ODO e Y é chamado de objeto ODO.
Dois fatores afetam a manipulação bem-sucedida de registros de comprimento variável:
  1. Cálculo correto de comprimentos de registro - O comprimento das partes variáveis de um item de grupo é o produto do objeto da frase DEPENDING ON e o comprimento do assunto da cláusula OCCURS.

  2. Conformidade dos dados no objeto da cláusula OCCURS DEPENDING ON com sua cláusula PICTURE -Se o conteúdo do objeto ODO não corresponder à sua cláusula PICTURE, o programa pode terminar de forma anormal. Você deve garantir que o objeto ODO especifique corretamente o número atual de ocorrências dos elementos da tabela.


Exemplo 1:

05  LINE-ITEM-COUNT   PIC 99.
    05  LINE-ITEMS OCCURS 0 TO 25 TIMES DEPENDING ON LINE-ITEM-COUNT.
        10  QUANTITY      PIC 9999.
        10  DESCRIPTION   PIC X(30).
        10  UNIT-PRICE    PIC S9(5)V99.

A tabela LINE-ITEMS contém três campos (QUANTITY, DESCRIPTION, UNIT-PRICE) que formam uma linha em uma fatura. Cada fatura pode ter de 0 a 25 itens de linha. O número real de itens de linha em uma determinada fatura e, portanto, no registro, é fornecido pelo campo LINE-ITEM-COUNT.

Uma instância da tabela ocupa 41 bytes, e a tabela pode ocorrer de 0 a 25 vezes, portanto o espaço total ocupado pela tabela LINE-ITEMS no registro varia de 0 bytes a 1025 bytes. Se houver algum campo após esta tabela, sua posição no registro mudará, dependendo do número de ocorrências da tabela.

Exemplo 2:

01 REC-1.
   05 FIELD-1 OCCURS 1 TO 100 TIMES DEPENDING ON WS-COUNT.
     10 WS-A PIC X(05).
     10 WS-B PIC X(05).

No exemplo acima, FIELD-1 é uma tabela de comprimento variável. FIELD-1 pode ter de 1 a 100 registros. O número real de registros depende do valor WS-COUNT.

O tamanho da tabela depende do número de ocorrências da tabela, ou seja, WS-COUNT. O tamanho mínimo é ocupado 10 bytes e o máximo é 1000 bytes.