Menu principal                 [Fechar]


Linguagem de programação COBOL - SEARCH ALL


Volta a página anterior

Volta ao Menu Principal


Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF.

SEARCH ALL
A instrução SEARCH ALL é usada para realizar uma pesquisa binária.

Quando você usar SEARCH ALL para executar uma procura binária, não é preciso setar o índice antes do mesmo iniciar.
O índice usado sempre é o associado com o primeiro index-name na cláusula OCCURS, e varia durante execução para maximizar a eficiência de pesquisa.

Para usar a declaração SEARCH ALL, sua tabela deve estar ordenada pelas KEY(s) especificadas dentro da cláusula OCCURS.
Você pode especificar qualquer KEY dentro da condição WHEN, mas tudo que precede os data-names na opção KEY também deve ser testado.
O teste deve ser uma condição EQUAL TO, e o data-name KEY ou tenha que ser o assunto da condição ou o nome de uma variável condicional com que o nome a ser testado.
O condição WHEN também pode ser uma condição de combinação, formada de uma simple condição com AND como o único conetivo lógico.
A KEY e seu objeto de comparação devem ser compatíveis, como declarado na relação regras de teste.



O seu formato geral é:

Sintaxe do comando SEARCH ALL


A instrução NEXT SENTENCE não pode ser usada com END-SEARCH. Se a instrução END-SEARCH for obrigatória em sua Instalaçao (Empresa) use CONTINUE e não NEXT SENTENCE.


Diferenças entra as instruções SEARCH e SEARCH ALL

SEARCH SEARCH ALL

 Realiza uma pesquisa serial  Realiza uma pesquisa binária

 As entradas da tabela não precisam  estar em qualquer ordem  As entradas da tabela devem estar ordenadas pelo argumento da  tabela ou mesmo pela função da tabela.
 O campo que estiver na ordem é especificado em uma cláusula  ASCENDING OU DESCENDING KEY como parte de uma entrada  OCCURS

 Exige uma instrução SET antes da instrução SEARCH para  especificar o ponto inicial da pesquisa  Não precisa de uma instrução SET antes da instrução  SEARCH ALL


Limitações da instrução SEARCH ALL
 1. A condição após a palavra WHEN só pode fazer um teste de igualdade:
     Válido:    WHEN SIGLA-UF (IX-TAB) EQUAL WS-SIGLA-UF
     Inválido: WHEN SIGLA-UF (IX-TAB) < WS-SIGLA-UF

 2. Se a condição após a palavra WHEN for uma instrição condicional composta:
     a. Cada parte da instrução condicional só pode consistir em um teste relacional que envolva uma condição de igualdade.
     b. A única condição composta permitida é a que utiliza palavras AND e não OR.
         Válido:    WHEN VALOR1 (INDEX) = VLR1
                         AND     VALOR2 (INDEX) = VLR2

         Inválido: WHEN VALOR1 (INDEX) = VLR1
                         OR       VALOR2 (INDEX) = VLR2


 3. Só pode ser usada uma cláusula WHEN com uma instrução SEARCH ALL

 4. A opção VARYING não pode ser usada com a instrução SEARCH ALL

 5. O item OCCURS e seu índice, que define o argumento da tabela, devem aparecer à esquerda do sinal de igualdade.
     Válido:     WHEN VALOR1 (INDEX) = VLR1
      Inválido: WHEN VLR1 = VALOR1 (INDEX)




       Um exemplo:

      *-----------------------------------------------------------------
       WORKING-STORAGE SECTION.                                         
      *-----------------------------------------------------------------
                                                                        
       01  WS-TABELA-ESTADOS.                                           
           05 TAB-NOME-UF.                                              
              10  FILLER       PIC X(021) VALUE "ACACRE               ".
              10  FILLER       PIC X(021) VALUE "ALALAGOAS            ".
              10  FILLER       PIC X(021) VALUE "AMAMAZONAS           ".
              10  FILLER       PIC X(021) VALUE "APAMAPA              ".
              10  FILLER       PIC X(021) VALUE "BABAHIA              ".
              10  FILLER       PIC X(021) VALUE "CECEARA              ".
              10  FILLER       PIC X(021) VALUE "DFDISTRITO FEDERAL   ".
              10  FILLER       PIC X(021) VALUE "ESESPIRITO SANTO     ".
              10  FILLER       PIC X(021) VALUE "GOGOIAS              ".
              10  FILLER       PIC X(021) VALUE "MAMARANHAO           ".
              10  FILLER       PIC X(021) VALUE "MGMINAS GERAIS       ".
              10  FILLER       PIC X(021) VALUE "MSMATO GROSSO DO SUL ".
              10  FILLER       PIC X(021) VALUE "MTMATO GROSSO        ".
              10  FILLER       PIC X(021) VALUE "PAPARA               ".
              10  FILLER       PIC X(021) VALUE "PBPARAIBA            ".
              10  FILLER       PIC X(021) VALUE "PEPERNAMBUCO         ".
              10  FILLER       PIC X(021) VALUE "PIPIAUI              ".
              10  FILLER       PIC X(021) VALUE "PRPARANA             ".
              10  FILLER       PIC X(021) VALUE "RJRIO DE JANEIRO     ".
              10  FILLER       PIC X(021) VALUE "RNRIO GRANDE DO NORTE".
              10  FILLER       PIC X(021) VALUE "RORONDONIA           ".
              10  FILLER       PIC X(021) VALUE "RRRORAIAMA           ".
              10  FILLER       PIC X(021) VALUE "RSRIO GRANDE DO SUL  ".
              10  FILLER       PIC X(021) VALUE "SCSANTA CATARINA     ".
              10  FILLER       PIC X(021) VALUE "SESERGIPE            ".
              10  FILLER       PIC X(021) VALUE "SPSAO PAULO          ".
              10  FILLER       PIC X(021) VALUE "TOTOCANTINS          ".
           05 TAB-NOME-UF-R    REDEFINES  TAB-NOME-UF.                  
              07  WS-CAJUGUDU  OCCURS 27 TIMES                          
                               DESCENDING KEY SIGLA-UF                  
                               INDEXED BY IX-TAB.                       
                  10  SIGLA-UF PIC X(002).                              
                  10  NOME-UF  PIC X(019).                              

       01  WS-AUXILIARES.                                               
           05 NAO-ACHOU-NADA             PIC 9(003) VALUE ZEROES.       
           05 WS-SIGLA-UF                PIC X(002) VALUE SPACES.       

      *-----------------------------------------------------------------
       PROCEDURE DIVISION.                                              
      *-----------------------------------------------------------------
                                                                        
           MOVE ZEROES TO NAO-ACHOU-NADA                                
           MOVE SIGLA-DA-UF TO WS-SIGLA-UF                                   
           SEARCH ALL WS-CAJUGUDU                                       
                  AT END                                                
                     MOVE 1 TO NAO-ACHOU-NADA                           
                WHEN SIGLA-UF (IX-TAB) EQUAL WS-SIGLA-UF                
                     MOVE NOME-UF (IX-TAB) TO VARIAVEL                           
           END-SEARCH                                                   

           IF  NAO-ACHOU-NADA EQUAL 1
               codifique as instrições necessarias
           END-IF. 
      

Volta para o início da página

Volta a página anterior

Volta ao Menu Principal