A instrução SEARCH ALL realiza uma pesquisa binária em uma tabela ordenada no COBOL. É uma alternativa mais eficiente ao SEARCH comum, pois divide a tabela ao meio repetidamente até encontrar (ou não) o valor desejado. Ideal para buscas rápidas em grandes volumes de dados.

📌 Para que serve

  • Procurar um valor específico dentro de uma tabela ordenada.

  • Executar ações somente se o valor for localizado.

  • Aumentar a eficiência da busca com uma abordagem binária.

🧾 Sintaxe básica

SEARCH ALL nome-da-tabela
    [AT END instrução-se-não-encontrado]
    WHEN chave = valor-buscado
        instruções-quando-encontrado
END-SEARCH.

✅ Exemplo prático

IDENTIFICATION DIVISION.
PROGRAM-ID. EXEMPLO-SEARCHALL.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 TABELA.
   05 REGISTRO OCCURS 10 TIMES
      ASCENDING KEY IS CODIGO
      INDEXED BY IDX.
      10 CODIGO  PIC 99.
      10 NOME    PIC A(3).

01 CHAVE-BUSCADA PIC 99 VALUE 93.

PROCEDURE DIVISION.
   MOVE '12ABC56DEF34GHI78JKL93MNO11PQR' TO TABELA.

   SEARCH ALL REGISTRO
      AT END DISPLAY "Registro não encontrado."
      WHEN CODIGO(IDX) = CHAVE-BUSCADA
         DISPLAY "Registro encontrado:"
         DISPLAY CODIGO(IDX)
         DISPLAY NOME(IDX)
   END-SEARCH.

⚙️ Como funciona internamente

  • O SEARCH ALL não exige que o índice seja inicializado com SET.

  • Ele usa o índice associado automaticamente.

  • A tabela precisa estar ordenada conforme a chave definida com ASCENDING KEY (ou DESCENDING KEY).

  • O COBOL aplica a busca binária com base na chave da cláusula WHEN.

⚠️ Regras importantes

  • A tabela deve conter OCCURS ... ASCENDING/DESCENDING KEY IS ... INDEXED BY.

  • Não use subscritos (ex: REGISTRO(3)) — use índices definidos com INDEXED BY.

  • Todos os campos-chave anteriores à chave usada na cláusula WHEN também devem estar definidos na condição WHEN, se houver mais de um.

  • A busca só é confiável se os dados estiverem ordenados corretamente.

🧠 Dicas práticas

  • Utilize SEARCH ALL em tabelas grandes e ordenadas, onde a performance importa.

  • Combine com AT END para tratar casos em que o valor não é encontrado.

  • Para ordenação correta, sempre preencha os dados em ordem crescente ou use SORT.

  • Evite SEARCH ALL em tabelas com valores duplicados, a menos que souber exatamente como o COBOL trata os índices no seu compilador.

🔍 Diferença entre SEARCH e SEARCH ALL

Característica SEARCH SEARCH ALL
Tipo de busca Sequencial Binária
Precisa ordenar dados Não Sim
Inicializa índice Sim (com SET) Não
Performance Mais lenta Mais rápida
Uso indicado Tabelas pequenas Tabelas grandes

 

✅ Conclusão

A instrução SEARCH ALL é uma ferramenta poderosa do COBOL para buscas rápidas e eficientes em tabelas ordenadas. Quando usada corretamente, ela reduz drasticamente o tempo de pesquisa e melhora o desempenho do programa. Mas atenção: dados fora de ordem invalidam os resultados. Sempre garanta a consistência da chave!