A instrução SEARCH no COBOL permite fazer a varredura de uma tabela (definida com OCCURS) para localizar um elemento que atenda a uma condição específica. Essa busca pode ser sequencial (SEARCH) ou binária (SEARCH ALL), dependendo de como a tabela está organizada.

📌 Para que serve

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

  • Executar ações específicas quando a condição de busca for atendida.

  • Localizar rapidamente elementos em uma tabela ordenada (com SEARCH ALL).

🧾 Sintaxe básica

🔹 Pesquisa sequencial

SET indice TO 1
SEARCH nome-da-tabela
   WHEN condicao
      instruções
   [WHEN outra-condicao
      instruções]
   [AT END
      instrução-se-caso-não-encontrado]
END-SEARCH.

🔹 Pesquisa binária

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

✅ Exemplo prático

🔹 SEARCH (sequencial)

01 CLIENTES.
   05 CLIENTE         OCCURS 10 TIMES
                      INDEXED BY IDX-CLI.
      10 NOME         PIC X(30).
      10 CPF          PIC X(11).

SET IDX-CLI TO 1
SEARCH CLIENTE
   WHEN CPF(IDX-CLI) = "12345678900"
      DISPLAY "Cliente encontrado: ", NOME(IDX-CLI)
   AT END
      DISPLAY "Cliente não encontrado!"
END-SEARCH.

🔹 SEARCH ALL (binária)

01 TABELA-PRODUTOS.
   05 PRODUTO         OCCURS 100 TIMES
                      ASCENDING KEY IS CODIGO
                      INDEXED BY IDX-PROD.
      10 CODIGO       PIC 9(5).
      10 DESCRICAO    PIC X(30).

MOVE 10025 TO CHAVE-PROD
SEARCH ALL PRODUTO
   WHEN CODIGO(IDX-PROD) = CHAVE-PROD
      DISPLAY "Produto: ", DESCRICAO(IDX-PROD)
   AT END
      DISPLAY "Produto não encontrado!"
END-SEARCH.

⚙️ Como funciona internamente

Tipo de Pesquisa Requer ordenação? Tipo de acesso Performance
SEARCH Não Sequencial Lento
SEARCH ALL Sim (ordenado) Binário Rápido
  • SEARCH verifica elemento por elemento até encontrar.

  • SEARCH ALL realiza busca binária — divide a tabela ao meio para acelerar a localização.

⚠️ Regras importantes

  • A tabela deve ter OCCURS e INDEXED BY definidos.

  • O índice precisa ser inicializado com SET antes do SEARCH (somente na pesquisa sequencial).

  • Para SEARCH ALL, a tabela deve estar ordenada com ASCENDING KEY ou DESCENDING KEY.

  • Se a condição não for satisfeita:

    • O controle vai para o AT END, se existir.

    • Caso contrário, segue para a próxima instrução.

🧠 Dicas práticas

  • Use SEARCH ALL sempre que puder garantir que a tabela esteja ordenada — é muito mais eficiente.

  • Prefira SEARCH em tabelas pequenas ou que não estejam ordenadas.

  • Em tabelas multidimensionais, use SEARCH para cada dimensão separadamente.

  • Evite usar SEARCH com tabelas com muitos dados se a ordem não for garantida — pode ser lento.

 

✅ Conclusão

A instrução SEARCH é essencial para localizar dados em tabelas no COBOL. Quando bem utilizada, permite que o programa reaja dinamicamente a diferentes conteúdos, executando lógica específica ao encontrar registros. Saber escolher entre SEARCH e SEARCH ALL impacta diretamente na performance e corretude do seu programa.