A maneira como os operandos são aumentados ou diminuídos depende do número de variáveis especificadas.
Na discussão a seguir, toda referência ao identifier-n se refere igualmente ao index-name-n (exceto quando identifier-n é o objeto da frase BY).
Se o identifier-2 ou identifier-5 estiver inscrito, os subscritos serão avaliados sempre que o conteúdo do item de dados referenciado pelo identificador
for definido ou aumentado.
Se o identifier-3 , o identifier-4 , o identifier-6 ou o identifier-7 estiverem inscritos, os subscritos serão avaliados sempre que o conteúdo do item
de dados referenciado pelo identificador for usado em uma operação de configuração ou de aumento.
A figura a seguir ilustra a lógica da instrução PERFORM quando um identificador é variado com TEST BEFORE.
A figura a seguir ilustra a lógica da instrução PERFORM quando um identificador é variado com TEST AFTER.

Variando dois identificadores
PERFORM PROCEDURE-NAME-1 THROUGH PROCEDURE-NAME-2
VARYING IDENTIFIER-2 FROM IDENTIFIER-3
BY IDENTIFIER-4 UNTIL CONDITION-1
AFTER IDENTIFIER-5 FROM IDENTIFIER-6
BY IDENTIFIER-7 UNTIL CONDITION-2
- identifier-2 e identifier-5 são definidos com seus valores iniciais, identifier-3 e identifier-6 , respectivamente.
- A condition-1 é avaliada da seguinte forma:
- Se for falso, as etapas 3 a 7 são executadas.
- Se for verdade, o controle passa diretamente para a instrução após a instrução PERFORM.
- A condition-2 é avaliada da seguinte forma:
- Se for falso, as etapas 4 a 6 são executadas.
- Se for verdade, o identifier-2 é aumentado pelo identifier-4 , o identifier-5 é definido como o valor atual do identifier-6 e a etapa 2 é repetida.
- procedure-name-1 e procedure-name-2 são executados uma vez (se especificado).
- o identifier-5 é aumentado pelo identifier-7 .
- As etapas 3 a 5 são repetidas até que a condição 2 seja verdadeira.
- As etapas 2 a 6 são repetidas até que a condição 1 seja verdadeira.
No final da execução da instrução PERFORM:
- identifier-5 contém o valor atual do identifier-6 .
- identifier-2 possui um valor que excede a última configuração usada pelo valor de incremento ou decremento (a menos que a condition-1 seja verdadeira
no início da execução da instrução PERFORM, nesse caso, o identifier-2 contém o valor atual do identifier-3 ) .
A figura a seguir ilustra a lógica da instrução PERFORM quando dois identificadores são variados com o TEST BEFORE.
A figura a seguir ilustra a lógica da instrução PERFORM quando dois identificadores são variados com o TEST AFTER.
Variando três identificadores (Varying three identifiers)
PERFORM PROCEDURE-NAME-1 THROUGH PROCEDURE-NAME-2
VARYING IDENTIFIER-2 FROM IDENTIFIER-3
BY IDENTIFIER-4 UNTIL CONDITION-1
AFTER IDENTIFIER-5 FROM IDENTIFIER-6
BY IDENTIFIER-7 UNTIL CONDITION-2
AFTER IDENTIFIER-8 FROM IDENTIFIER-9
BY IDENTIFIER-10 UNTIL CONDITION-3
As ações são iguais às de dois identificadores, exceto que o identifier-8 passa pelo ciclo completo cada vez que o identifier-5 é aumentado
pelo identifier-7 , que, por sua vez, passa por um ciclo completo cada vez que o identifier-2 é variado.
No final da execução da instrução PERFORM:
- identifier-5 e identifier-8 contêm os valores atuais de identifier-6 e identifier-9 , respectivamente.
- O identifier-2 possui um valor que excede sua última configuração usada em um valor de incremento / decremento (a menos que a condition-1 seja
verdadeira no início da execução da instrução PERFORM, nesse caso, o identifier-2 contém o valor atual do identifier-3 ).
Variando mais de três identificadores (Varying more than three identifiers)
Você pode produzir ações análogas da instrução PERFORM para o exemplo acima com a adição de até quatro frases AFTER.
Regras de frase variadas (Varying phrase rules)
Não importa quantas variáveis sejam especificadas, as seguintes regras se aplicam:
- Nas frases VARYING ou AFTER, quando um nome de índice é especificado:
- O nome do índice é inicializado e incrementado ou decrementado de acordo com as regras da frase INDEX.
(Veja também a instrução SET.)
- Na frase FROM associada, um identificador deve ser descrito como um número inteiro e ter um valor positivo; um literal deve ser um número inteiro
positivo.
- Na frase BY associada, um identificador deve ser descrito como um número inteiro; um literal deve ser um número inteiro diferente de zero.
- Na frase FROM, quando um nome de índice é especificado:
- Na frase VARYING ou AFTER associada, um identificador deve ser descrito como um número inteiro.
É inicializado conforme descrito na instrução SET.
- Na frase BY associada, um identificador deve ser descrito como um número inteiro e ter um valor diferente de zero; um literal deve ser um número
inteiro diferente de zero.
- Na frase BY, identificadores e literais devem ter valores diferentes de zero.
- Alterar os valores dos identificadores ou nomes de índices nas frases VARYING, FROM e BY durante a execução altera o número de vezes que os
procedimentos são executados.
|