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 |
-
SEARCHverifica elemento por elemento até encontrar. -
SEARCH ALLrealiza busca binária — divide a tabela ao meio para acelerar a localização.
⚠️ Regras importantes
-
A tabela deve ter
OCCURSeINDEXED BYdefinidos. -
O índice precisa ser inicializado com
SETantes doSEARCH(somente na pesquisa sequencial). -
Para
SEARCH ALL, a tabela deve estar ordenada comASCENDING KEYouDESCENDING 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 ALLsempre que puder garantir que a tabela esteja ordenada — é muito mais eficiente. -
Prefira
SEARCHem tabelas pequenas ou que não estejam ordenadas. -
Em tabelas multidimensionais, use
SEARCHpara cada dimensão separadamente. -
Evite usar
SEARCHcom 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.