COBOL - Comando EVALUATE - www.cadcobol.com.br



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

EVALUATE
Enterprise COBOL for z/OS 4.2.0


A instrução EVALUATE, à semelhança do verbo IF, permite alterar o fluxo do programa em função dos seus dados.
Ao encontrar o EVALUATE, cada uma das suas condições será avaliada até se encontrar uma que seja verdadeira.
Seguidamente, o código associado a essa condição é executado e, posteriormente, é executada a instrução seguinte ao END-EVALUATE.

Formato geral:


Operandos antes da frase WHEN
São interpretados de duas maneiras, dependendo de como são especificados:
  • Individualmente, eles são chamados de assuntos de seleção.
  • Coletivamente, eles são chamados de um conjunto de assuntos de seleção.
Operandos na frase WHEN
São interpretados de duas maneiras, dependendo de como são especificados:
  • Individualmente, eles são chamados objetos de seleção
  • Coletivamente, eles são chamados de um conjunto de objetos de seleção.
ALSO
Separa os assuntos de seleção em um conjunto de assuntos de seleção; separa os objetos de seleção em um conjunto de objetos de seleção.

THROUGH e THRU
São equivalentes.
Dois operandos conectados por uma frase THRU devem ser da mesma classe.
Os dois operandos assim conectados constituem um único objeto de seleção.

O número de objetos de seleção em cada conjunto de objetos de seleção deve ser igual ao número de assuntos de seleção.

Cada objeto de seleção dentro de um conjunto de objetos de seleção deve corresponder ao assunto de seleção com a mesma posição ordinal dentro do conjunto de assuntos de seleção, de acordo com as seguintes regras:
  • Identificadores, literais ou expressões aritméticas que aparecem em um objeto de seleção devem ser operandos válidos para comparação com o operando correspondente no conjunto de assuntos de seleção.
    Para comparações envolvendo campos de data, consulte Comparação de campos de data.
  • condition-1, condition-2 ou a palavra TRUE ou FALSE que aparece como um objeto de seleção deve corresponder a uma expressão condicional ou a palavra TRUE ou FALSE no conjunto de assuntos de seleção.
  • A palavra QUALQUER pode corresponder a um assunto de seleção de qualquer tipo.
END-EVALUATE
Esse terminador de escopo explícito serve para delimitar o escopo da instrução EVALUATE.
END-EVALUATE permite que uma instrução EVALUATE condicional seja aninhada em outra instrução condicional.

Determinando valores
A execução da instrução EVALUATE opera como se cada sujeito de seleção e objeto de seleção tivesse sido avaliado e atribuído um valor numérico, alfanumérico, DBCS ou caractere nacional; um intervalo de valores numéricos, alfanuméricos, DBCS ou caracteres nacionais; ou um valor de verdade.
Esses valores são determinados da seguinte maneira:
  • Qualquer assunto de seleção especificado pelo identifier-1 , identifier-2 , ... e qualquer objeto de seleção especificado pelo identifier-3 ou identifier-5 sem a frase NOT ou THRU recebem o valor e a classe do item de dados a que se referem.

  • Qualquer assunto de seleção especificado por literal-1 , literal-2 , ... e qualquer objeto de seleção especificado por literal-3 ou literal-5 sem a frase NOT ou THRU recebem o valor e a classe do literal especificado.
    Se literal-3 ou literal-5 for a constante figurativa ZERO, QUOTE ou SPACE, a constante figurativa receberá a classe do assunto de seleção correspondente.

  • Qualquer assunto de seleção no qual a expression-1, expression-2 , ... é especificada como expressão aritmética e qualquer objeto de seleção sem a frase NOT ou THRU na qual a arithmetic-expression-1 ou arithmetic-expression-3 é especificada atribuiu valores numéricos de acordo com as regras para avaliar uma expressão aritmética.
    (Consulte arithmetic_expressions - Expressões aritméticas.)
  • Qualquer assunto de seleção no qual a expression-1, expression-2 , ... é especificada como expressão condicional e qualquer objeto de seleção no qual a condition-1 ou a condition-2 é especificada recebe um valor de verdade de acordo com as regras de avaliação expressões condicionais.

  • Qualquer assunto de seleção ou qualquer objeto de seleção especificado pelas palavras TRUE ou FALSE recebe um valor de verdade.
    O valor de verdade "true" é atribuído aos itens especificados com a palavra TRUE, e o valor de verdade "false" é atribuído aos itens especificados com a palavra FALSE.

  • Qualquer objeto de seleção especificado pela palavra ANY não é mais avaliado.

  • Se a frase THRU for especificada para um objeto de seleção sem a frase NOT, o intervalo de valores incluirá todos os valores que, quando comparados ao assunto da seleção, são maiores ou iguais ao primeiro operando e menores ou iguais ao segundo operando, de acordo com para as regras de comparação.
    Se o primeiro operando for maior que o segundo, não haverá valores no intervalo.

  • Se a frase NOT for especificada para um objeto de seleção, todos os valores atribuídos a esse item não serão iguais ao valor ou intervalo de valores que seriam atribuídos ao item se a frase NOT fosse omitida.
Comparando assuntos e objetos de seleção
A execução da instrução EVALUATE prossegue como se os valores atribuídos aos sujeitos e objetos de seleção fossem comparados para determinar se alguma frase WHEN satisfaz o conjunto de assuntos de seleção.
Essa comparação ocorre da seguinte maneira:
  1. Cada objeto de seleção dentro do conjunto de objetos de seleção para a primeira frase WHEN é comparado ao assunto de seleção que possui a mesma posição ordinal no conjunto de assuntos de seleção.
    Uma das seguintes condições deve ser atendida para que a comparação seja atendida:
    1. Se os itens que estão sendo comparados tiverem valores numéricos, alfanuméricos, DBCS ou caracteres nacionais atribuídos, ou um intervalo de valores numéricos, alfanuméricos, DBCS ou caracteres nacionais, a comparação será satisfeita se o valor ou um valor no intervalo de valores, atribuído ao objeto de seleção é igual ao valor atribuído ao sujeito da seleção de acordo com as regras de comparação.
    2. Se os itens que estão sendo comparados tiverem valores de verdade designados, a comparação será satisfeita se os itens receberem valores de verdade idênticos.
    3. Se o objeto de seleção que está sendo comparado for especificado pela palavra ANY, a comparação será sempre satisfeita, independentemente do valor do assunto da seleção.
  2. Se a comparação acima for atendida para cada objeto de seleção dentro do conjunto de objetos de seleção que está sendo comparado, a frase WHEN que contém esse conjunto de objetos de seleção é selecionada como aquela que satisfaz o conjunto de assuntos de seleção.
  3. Se a comparação acima não for satisfeita para todos os objetos de seleção dentro do conjunto de objetos de seleção que estão sendo comparados, esse conjunto de objetos de seleção não satisfaz o conjunto de assuntos de seleção.
  4. Este procedimento é repetido para conjuntos subsequentes de objetos de seleção na ordem em que aparecem no texto de origem, até que uma frase WHEN que satisfaça o conjunto de assuntos de seleção seja selecionada ou até que todos os conjuntos de objetos de seleção estejam esgotados.
Executando a instrução EVALUATE
Após a conclusão da operação de comparação, a execução da instrução EVALUATE continua da seguinte maneira:
  • Se uma frase WHEN for selecionada, a execução continuará com a primeira declaração imperative-statement-1 após a frase WHEN selecionada.
    Observe que várias instruções WHEN são permitidas para uma única imperative-statement-1.
  • Se nenhuma frase WHEN for selecionada e uma frase WHEN OTHER for especificada, a execução continuará com a imperative-statement-2.
  • Se nenhuma frase WHEN for selecionada e nenhuma frase WHEN OTHER for especificada, a execução continuará com a próxima instrução executável após o delimitador de escopo.
  • O escopo de execução da instrução EVALUATE é finalizado quando a execução atinge o final do escopo da frase WHEN ou WHEN OTHER selecionada, ou quando nenhuma frase WHEN é selecionada e nenhuma frase WHEN OTHER é especificada.


Primeiro exemplo
           IF  ACONTA EQUAL ZEROES                         
               EVALUATE TRUE                               
                   WHEN BCONTA = 2                         
                        MOVE 16 TO K                       
                        MOVE 0  TO CCONTA DCONTA           
                   WHEN BCONTA = 3                         
                        MOVE 20 TO FATOR                   
                   WHEN BCONTA = 4                         
                        MOVE BCONTA TO FATOR               
                   WHEN BCONTA = 5                         
                        IF  CAR-ENTRA EQUAL "X" OR "x"     
                            MOVE 1 TO FATOR                
                        ELSE                               
                            MOVE 2 TO FATOR                
                        END-IF                             
                   WHEN BCONTA = 6                         
                        IF  CAR-ENTRA EQUAL "N" OR "n"     
                            MOVE 3 TO FATOR                
                        ELSE                               
                            MOVE 4 TO FATOR                
                        END-IF                             
               END-EVALUATE                                
           END-IF.
  • Se a variável de nome ACONTA for 0 (zero), o fluxo avaliará a variável de nome BCONTA.
  • Para cada valor possível especificado neste fluxo para essa variável, o programa efetuará uma ação diferente.
  • Não se importe com as declarações IF e END-IF dentro das condições.

Segundo exemplo
           EVALUATE WSS-TIPO-ACAO                                      
               WHEN "I"                                      
                    PERFORM R100-ROTINA-INCLUIR THRU R100-FIM                          
               WHEN "A"                                      
                    PERFORM R200-ROTINA-ALTERAR THRU R200-FIM                          
               WHEN "E"                                      
                    PERFORM R300-ROTINA-EXCLUIR THRU R300-FIM                          
               WHEN OTHER                                          
                    PERFORM R900-ROTINA-ERRO    THRU R900-FIM                             
           END-EVALUATE.
Se a variável de nome WSS-TIPO-ACAO for igual a "I" a rotina R100-ROTINA-INCLUIR será executada,
se conter o valor "A" a rotina R200-ROTINA-ALTERAR será executada,
se conter o valor "E" a rotina R300-ROTINA-EXLUIR será executada.
Caso não satisfaça nenhuma das opções a rotina R900-ROTINA-ERRO será acionada.

Terceiro exemplo
Também podemos usar uma cláusula THRU com a instrução EVALUATE.
Suponha que você deseja imprimir os graus de uma turma com base na média de um aluno.
O código a seguir é válido:
           EVALUATE MEDIA                                      
               WHEN 90 THRU 100                           
                    MOVE "A" TO GRAU                          
               WHEN 80 THRU 89                            
                    MOVE "B" TO GRAU                          
               WHEN 70 THRU 79                            
                    MOVE "C" TO GRAU                      
               WHEN 60 THRU 69                            
                    MOVE "D" TO GRAU                      
               WHEN 00 THRU 59                            
                    MOVE "F" TO GRAU                            
               WHEN OTHER                                          
                    PERFORM R900-ROTINA-ERRO THRU R900-FIM                             
           END-EVALUATE.
O exemplo número 3 (tres) também poderia ser codificado da seguinte maneira:
           EVALUATE TRUE                                      
               WHEN MEDIA >= 90 AND <= 100                        
                    MOVE "A" TO GRAU                          
               WHEN MEDIA >= 80 AND <= 89                        
                    MOVE "B" TO GRAU                          
               WHEN MEDIA >= 70 AND <= 79                     
                    MOVE "C" TO GRAU                      
               WHEN MEDIA >= 60 AND <= 69                 
                    MOVE "D" TO GRAU                      
               WHEN MEDIA >= 00 AND <= 59                 
                    MOVE "F" TO GRAU                            
               WHEN OTHER                                          
                    PERFORM R900-ROTINA-ERRO THRU R900-FIM                             
           END-EVALUATE.

Quarto exemplo - apresentando 4 (quatro) variações da mesma situação:
           EVALUATE IDADE                         
               WHEN  0 THRU 19                    
                    PERFORM R100-ROTINA-MENOR     
               WHEN 20 THRU 99                    
                    PERFORM R200-ROTINA-ADULTO    
               WHEN OTHER                         
                    PERFORM R900-ROTINA-VER-IDADE 
           END-EVALUATE.

           EVALUATE TRUE                         
               WHEN IDADE >=  0 AND <= 19        
                    PERFORM R100-ROTINA-MENOR    
               WHEN IDADE >= 20 AND <= 99        
                    PERFORM R200-ROTINA-ADULTO   
               WHEN OTHER                        
                    PERFORM R900-ROTINA-VER-IDADE
           END-EVALUATE.

           EVALUATE IDADE <= 19               
               WHEN TRUE                      
                    PERFORM R100-ROTINA-MENOR 
               WHEN FALSE                     
                    PERFORM R200-ROTINA-ADULTO
           END-EVALUATE.

           EVALUATE TRUE                      
               WHEN IDADE <= 19               
                    PERFORM R100-ROTINA-MENOR 
               WHEN OTHER                     
                    PERFORM R200-ROTINA-ADULTO
           END-EVALUATE.


Quinto exemplo:
 
           EVALUATE (WS-CARLOS01 = 10) ALSO (WS-CARLOS02 = 20)     
               WHEN TRUE ALSO TRUE                                  
                    PERFORM R100-TRUE-TRUE   THRU R100-FIM  
               WHEN TRUE ALSO FALSE                                 
                    PERFORM R200-TRUE-FALSE  THRU R200-FIM  
               WHEN FALSE ALSO TRUE                                 
                    PERFORM R300-FALSE-TRUE  THRU R300-FIM  
               WHEN FALSE ALSO FALSE                                
                    PERFORM R400-FALSE-FALSE THRU R400-FIM  
           END-EVALUATE.
            

Sexto exemplo - estudo de situações encontradas - N o v o
      *    As variáveis WSS-CONTA-01 e WSS-CONTA-02 podem conter os valores 10, 20 ou 30 
      *    e todas as combinações possiveis entre eles   

           WSS-CONTA-01 = 10 E WSS-CONTA-02 = 10
           WSS-CONTA-01 = 10 E WSS-CONTA-02 = 20
           WSS-CONTA-01 = 10 E WSS-CONTA-02 = 30

           WSS-CONTA-01 = 20 E WSS-CONTA-02 = 10
           WSS-CONTA-01 = 20 E WSS-CONTA-02 = 20
           WSS-CONTA-01 = 20 E WSS-CONTA-02 = 30

           WSS-CONTA-01 = 30 E WSS-CONTA-02 = 10
           WSS-CONTA-01 = 30 E WSS-CONTA-02 = 20
           WSS-CONTA-01 = 30 E WSS-CONTA-02 = 30
      
      *    Por favor esqueçam essa codificação
         
           IF WSS-CONTA-01 EQUAL 10 AND 
              WSS-CONTA-02 EQUAL 10
              PERFORM P1010-PROCESSA THRU P1010-FIM
           ELSE
              IF WSS-CONTA-01 EQUAL 10 AND 
                 WSS-CONTA-02 EQUAL 20
                 PERFORM P1020-PROCESSA THRU P1020-FIM
              ELSE
                 IF WSS-CONTA-01 EQUAL 10 AND 
                    WSS-CONTA-02 EQUAL 30
                    PERFORM P1030-PROCESSA THRU P1030-FIM
                 ELSE
                    IF WSS-CONTA-01 EQUAL 20 AND 
                       WSS-CONTA-02 EQUAL 10
                       PERFORM P2010-PROCESSA THRU P2010-FIM
                    ELSE
                       IF WSS-CONTA-01 EQUAL 20 AND
                          WSS-CONTA-02 EQUAL 20
                          PERFORM P2020-PROCESSA THRU P2020-FIM
                       ELSE
                          IF WSS-CONTA-01 EQUAL 20 AND 
                             WSS-CONTA-02 EQUAL 30
                             PERFORM P2030-PROCESSA THRU P2030-FIM
                          ELSE 
                             IF WSS-CONTA-01 EQUAL 30 AND
                                WSS-CONTA-02 EQUAL 10
                                PERFORM P3010-PROCESSA THRU P3010-FIM
                             ELSE 
                                IF WSS-CONTA-01 EQUAL 30 AND 
                                   WSS-CONTA-02 EQUAL 20
                                   PERFORM P3020-PROCESSA THRU P3020-FIM
                                ELSE
                                   PERFORM P3030-PROCESSA THRU P3030-FIM
                                END-IF
                             END-IF
                          END-IF
                       END-IF
                    END-IF
                 END-IF
              END-IF
           END-IF

      *    Por favor esqueçam essa codificação, tambem
 
           IF WSS-CONTA-01 EQUAL 10
              IF WSS-CONTA-02 EQUAL 10
                 PERFORM P1010-PROCESSA THRU P1010-FIM
              ELSE
                 IF WSS-CONTA-02 EQUAL 20
                    PERFORM P1020-PROCESSA THRU P1020-FIM
                 ELSE
                    PERFORM P1030-PROCESSA THRU P1030-FIM
                 END-IF
              END-IF
           ELSE 
              IF WSS-CONTA-01 EQUAL 20
                 IF WSS-CONTA-02 EQUAL 10
                    PERFORM P2010-PROCESSA THRU P2010-FIM
                 ELSE
                    IF WSS-CONTA-02 EQUAL 20
                       PERFORM P2020-PROCESSA THRU P2020-FIM
                    ELSE
                       PERFORM P2030-PROCESSA THRU P2030-FIM
                    END-IF
                 END-IF
              ELSE 
                 IF WSS-CONTA-02 EQUAL 10
                    PERFORM P3010-PROCESSA THRU P3010-FIM
                 ELSE
                    IF WSS-CONTA-02 EQUAL 20
                       PERFORM P3020-PROCESSA THRU P3020-FIM
                    ELSE
                       PERFORM P3030-PROCESSA THRU P3030-FIM
                    END-IF
                 END-IF
              END-IF
           END-IF

      *    Codificação recomendável
 
           EVALUATE TRUE
              WHEN WSS-CONTA-01 EQUAL 10 
                   EVALUATE WSS-CONTA-02 
                      WHEN 10    PERFORM P1010-PROCESSA THRU P1010-FIM
                      WHEN 20    PERFORM P1020-PROCESSA THRU P1020-FIM
                      WHEN OTHER PERFORM P1030-PROCESSA THRU P1030-FIM
                   END-EVALUATE 
              WHEN WSS-CONTA-01 EQUAL 20 
                   EVALUATE WSS-CONTA-02 
                      WHEN 10    PERFORM P2010-PROCESSA THRU P2010-FIM
                      WHEN 20    PERFORM P2020-PROCESSA THRU P2020-FIM
                      WHEN OTHER PERFORM P2030-PROCESSA THRU P2030-FIM
                   END-EVALUATE 
              WHEN OTHER 
                   EVALUATE WSS-CONTA-02 
                      WHEN 10    PERFORM P3010-PROCESSA THRU P3010-FIM
                      WHEN 20    PERFORM P3020-PROCESSA THRU P3020-FIM
                      WHEN OTHER PERFORM P3030-PROCESSA THRU P3030-FIM
                   END-EVALUATE 
           END-EVALUATE
      

      *    Se fizeres essa combinação melhor ainda
      *    crie tres variáveis 

      *-----------------------------------------------------------------
       WORKING-STORAGE SECTION
      *-----------------------------------------------------------------

       01  WSS-AUXILIARES.
           05  WSS-CONTA               PIC 9(004)      VALUE ZEROES. 
           05  WSS-CONTA-R             REDEFINES WSS-CONTA.
               10  WS-CONTA-01-N       PIC 9(002).                        
               10  WS-CONTA-02-N       PIC 9(002).                        

      *-----------------------------------------------------------------
       PROCEDURE DIVISION.
      *-----------------------------------------------------------------

           MOVE WSS-CONTA-01 TO WSS-CONTA-01-N
           MOVE WSS-CONTA-02 TO WSS-CONTA-02-N

           EVALUATE WSS-CONTA
                    WHEN 1010  PERFORM P1010-PROCESSA THRU P1010-FIM
                    WHEN 1020  PERFORM P1020-PROCESSA THRU P1020-FIM
                    WHEN 1030  PERFORM P1030-PROCESSA THRU P1030-FIM
                    WHEN 2010  PERFORM P2010-PROCESSA THRU P2010-FIM
                    WHEN 2020  PERFORM P2020-PROCESSA THRU P2020-FIM
                    WHEN 2030  PERFORM P2030-PROCESSA THRU P2030-FIM
                    WHEN 3010  PERFORM P3010-PROCESSA THRU P3010-FIM
                    WHEN 3020  PERFORM P3020-PROCESSA THRU P3020-FIM
                    WHEN OTHER PERFORM P3030-PROCESSA THRU P3030-FIM
           END-EVALUATE
      

Sétimo exemplo
 
 Este exemplo do comando EVALUATE é um pouco mais complexo e tem abaixo do mesmo o 
 equivalente ao comando IF.

 Exemplo mais complexo do comando EVALUATE:

           EVALUATE A = B ALSO C > D ALSO TRUE
                    WHEN TRUE  ALSO TRUE  ALSO E = F + 15
                         PERFORM ROTINA-1
                    WHEN TRUE  ALSO TRUE  ALSO E > 12
                         PERFORM ROTINA-2
                    WHEN TRUE  ALSO FALSE ALSO ANY
                         PERFORM ROTINA-3
                    WHEN FALSE ALSO TRUE  ALSO ANY
                         PERFORM ROTINA-4
                    WHEN FALSE ALSO FALSE ALSO ANY
                         PERFORM ROTINA-5
           END-EVALUATE.

 O comando IF equivalente ao EVALUATE acima: 


           IF A EQUAL B 
              IF C GREATER THAN D 
                 IF E EQUAL F + 15 
                    PERFORM ROTINA-1
                 ELSE
                    IF E GREATER THAN 12 
                       PERFORM ROTINA-2
                    END-IF
                 END-IF
              ELSE
                 PERFORM ROTINA-3
              END-IF
           ELSE
              IF C GREATER THAN D 
                 PERFORM ROTINA-4
              ELSE
                 PERFORM ROTINA-5
              END-IF
           END-IF
      

Oitavo exemplo
 
 Outro exemplo mais complexo do comando EVALUATE:

      *-----------------------------------------------------------------
       WORKING-STORAGE SECTION. 
      *-----------------------------------------------------------------

       01  WS-AUXILIARES. 
           05 WS-IDADE             PIC 9(003). 
           05 WS-SEXO              PIC X(001). 
           05 WS-DESCRICAO         PIC X(020). 
           05 A                    PIC 9(003). 
           05 B                    PIC 9(004). 
           05 C                    PIC 9(004). 
           05 D                    PIC 9(004). 
           05 E                    PIC 9(005). 
           05 F                    PIC 9(006). 

      *-----------------------------------------------------------------
       PROCEDURE DIVISION. 
      *-----------------------------------------------------------------

           EVALUATE TRUE ALSO TRUE                                     
               WHEN WS-IDADE < 13 ALSO WS-SEXO = 'M'                  
                    MOVE 'MENINO JOVEM'       TO WS-DESCRICAO          
               WHEN WS-IDADE < 13 ALSO WS-SEXO = 'F'                   
                    MOVE 'MENINA JOVEM'       TO WS-DESCRICAO          
               WHEN WS-IDADE > 12 AND WS-IDADE < 20 ALSO WS-SEXO = 'M' 
                    MOVE 'MENINO ADOLESCENTE' TO WS-DESCRICAO          
               WHEN WS-IDADE > 12 AND WS-IDADE < 20 ALSO WS-SEXO = 'F' 
                    MOVE 'MENINA ADOLESCENTE' TO WS-DESCRICAO          
               WHEN WS-IDADE > 19 ALSO WS-SEXO = 'M'          
                    MOVE 'HOMEM ADULTO'       TO WS-DESCRICAO          
               WHEN WS-IDADE > 19 ALSO WS-SEXO = 'F'          
                    MOVE 'MULHER ADULTA'      TO WS-DESCRICAO          
               WHEN OTHER         
                    MOVE 'DADOS INVALIDOS'    TO WS-DESCRICAO          
           END-EVALUATE 

           EVALUATE TRUE ALSO TRUE
               WHEN A + B < 10 ALSO C = 10
                    MOVE 'CASO 1'             TO WS-DESCRICAO
               WHEN A + B > 50 ALSO C = ( D + E ) / F
                    MOVE 'CASO 2'             TO WS-DESCRICAO
               WHEN OTHER
                    MOVE 'OUTROS CASOS'       TO WS-DESCRICAO
           END-EVALUATE.
        

Nono exemplo - N o v o
 
 Os exemplos do comando EVALUATE abaixo descritos trazem o mesmo resultado. 
 
 
      *-----------------------------------------------------------------
       WORKING-STORAGE SECTION.                                         
      *-----------------------------------------------------------------
                                                                        
       01  WS-VARIAVEIS.                                                
           03 WS-CAMPO0                  PIC 9(001) VALUE 0.            
           03 WS-CAMPO1                  PIC 9(001) VALUE 1.            
           03 WS-CAMPO2                  PIC 9(001) VALUE 2.            
           03 WS-CAMPO3                  PIC 9(001) VALUE 3.            
                                                                        
      *-----------------------------------------------------------------
       PROCEDURE DIVISION.                                              
      *-----------------------------------------------------------------
                                                                        
           EVALUATE TRUE                                                
                    WHEN WS-CAMPO0 = 0                                  
                    OR   WS-CAMPO1 = 1                                  
                    OR   WS-CAMPO2 = 2                                  
                    OR   WS-CAMPO3 = 3                                  
                         Ação de tem que ser feita                             
                    WHEN OTHER
                         Ação de tem que ser feita                             
           END-EVALUATE

           EVALUATE TRUE                                                
                    WHEN WS-CAMPO0 = 0                                  
                    WHEN WS-CAMPO1 = 1                                  
                    WHEN WS-CAMPO2 = 2                                  
                    WHEN WS-CAMPO3 = 3                                  
                         Ação de tem que ser feita                             
                    WHEN OTHER                                          
                         Ação de tem que ser feita                             
           END-EVALUATE                                                 
      

Décimo exemplo - N o v o
 
 Exemplo do comando EVALUATE usando o nível 88 (oitenta e oito). 
 
 
      *-----------------------------------------------------------------
       WORKING-STORAGE SECTION.                                         
      *-----------------------------------------------------------------

       01  WS-TRANSACAO. 
           05 WS-TIPO-TRANSACAO          PIC X(001). 
              88 ADICIONA-TRANSACTION    VALUE 'I'. 
              88 ALTERA-TRANSACTION      VALUE 'A'. 
              88 EXCLUI-TRANSACTION      VALUE 'E'.

      *-----------------------------------------------------------------
       PROCEDURE DIVISION.                                              
      *-----------------------------------------------------------------

           MOVE TIPO-DE-TRANSACAO TO WS-TIPO-TRANSACAO
                                                             
           EVALUATE TRUE 
               WHEN ADICIONA-TRANSACTION 
                    PERFORM P1000-ADICIONA-REGISTRO 
               WHEN ALTERA-TRANSACTION 
                    PERFORM P2000-ALTERA-REGISTRO 
               WHEN EXCLUI-TRANSACTION 
                    PERFORM P3000-EXCLUI-REGISTRO 
           END-EVALUATE. 
                                                
      

Décimo primeiro exemplo - N o v o
 
      *    Por favor esqueçam essa codificação

           IF  NU-INDIC-CREDITO OF CADTB055 EQUAL 12                
               MOVE WE-MOVIMENTO TO WS-MOV-SAIDA-CX                
               MOVE 'IF' TO  WS1-BANCO                 
               PERFORM P2003-GRAVA-CONTRATO-CX         
           ELSE                
             IF  NU-INDIC-CREDITO OF CADTB055 EQUAL 16               
                 MOVE WE-MOVIMENTO TO WS-MOV-SAIDA-CX               
                 MOVE 'CA' TO  WS1-BANCO                
                 PERFORM P2003-GRAVA-CONTRATO-CX        
             ELSE               
              IF  NU-INDIC-CREDITO OF CADTB055 EQUAL 25              
                  MOVE WE-MOVIMENTO TO WS-MOV-SAIDA-CX               
                  MOVE 'CI' TO  WS1-BANCO                
                  PERFORM P2003-GRAVA-CONTRATO-CX        
              ELSE                          
               IF  NU-INDIC-CREDITO OF CADTB055 EQUAL 30            
                   MOVE WE-MOVIMENTO TO WS-MOV-SAIDA-CX             
                   MOVE 'CP' TO  WS1-BANCO              
                   PERFORM P2003-GRAVA-CONTRATO-CX      
               ELSE                        
                IF  NU-INDIC-CREDITO OF CADTB055 EQUAL 34           
                    MOVE WE-MOVIMENTO TO WS-MOV-SAIDA-CX            
                    MOVE 'CN' TO  WS1-BANCO             
                    PERFORM P2003-GRAVA-CONTRATO-CX     
                ELSE                       
                 IF  NU-INDIC-CREDITO OF CADTB055 EQUAL 38          
                     MOVE WE-MOVIMENTO TO WS-MOV-SAIDA-CX           
                     MOVE 'TM' TO  WS1-BANCO            
                     PERFORM P2003-GRAVA-CONTRATO-CX                
                 ELSE                      
                  IF  NU-INDIC-CREDITO OF CADTB055 EQUAL 61        
                      MOVE WE-MOVIMENTO TO WS-MOV-SAIDA-CX         
                      MOVE 'SE' TO  WS1-BANCO          
                      PERFORM P2003-GRAVA-CONTRATO-CX              
                  END-IF                  
                 END-IF                     
                END-IF                      
               END-IF                        
              END-IF                         
             END-IF                          
           END-IF 

      *    Lógica desenvolvida por DORNELLES Carlos Alberto

           MOVE WE-MOVIMENTO TO WS-MOV-SAIDA-CX                
           EVALUATE NU-INDIC-CREDITO OF CADTB055
                    WHEN 12 MOVE 'IF' TO  WS1-BANCO
                    WHEN 16 MOVE 'CA' TO  WS1-BANCO
                    WHEN 25 MOVE 'CI' TO  WS1-BANCO
                    WHEN 30 MOVE 'CP' TO  WS1-BANCO
                    WHEN 34 MOVE 'CN' TO  WS1-BANCO
                    WHEN 38 MOVE 'TM' TO  WS1-BANCO  
                    WHEN 61 MOVE 'SE' TO  WS1-BANCO 
           END-EVALUATE
           PERFORM P2003-GRAVA-CONTRATO-CX