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
eINDEXED BY
definidos. -
O índice precisa ser inicializado com
SET
antes doSEARCH
(somente na pesquisa sequencial). -
Para
SEARCH ALL
, a tabela deve estar ordenada comASCENDING KEY
ouDESCENDING 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.