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 comSET
. -
Ele usa o índice associado automaticamente.
-
A tabela precisa estar ordenada conforme a chave definida com
ASCENDING KEY
(ouDESCENDING 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 comINDEXED BY
. -
Todos os campos-chave anteriores à chave usada na cláusula
WHEN
também devem estar definidos na condiçãoWHEN
, 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!