| Bellacosa Mainframe apresenta guia de tabelas no COBOL |
☕ “Se Você Ainda Usa Subscript… o Batch Já Está Rindo de Você”
O Guia Jedi de Tabelas COBOL que Todo Padawan Precisa Antes que o CPU Account Chegue 💸
“No Mainframe, memória é preciosa… mas CPU é dinheiro vivo.”
Padawan, aproxime-se do terminal. Hoje vamos falar de um dos poderes mais silenciosos — e mais subestimados — do universo COBOL:
🛰️ TABELAS. ÍNDICES. BUSCAS. MEMÓRIA PURA.
Se você domina isso… domina o coração do batch.
Se não domina… o batch domina você.
🧠 Parte 1 — A Verdade Oculta: OCCURS Não É Só Um Array
Muitos iniciantes pensam:
“Ah, OCCURS é só um array.”
Não, jovem padawan.
É um buffer estruturado diretamente na memória do programa.
01 EMP-TABLE.
05 EMP-ENTRY OCCURS 100 TIMES.
10 EMP-ID PIC 9(6).
10 EMP-NAME PIC X(30).
Isso cria 100 registros contíguos.
Sem ponteiros. Sem heap. Sem frescura.
💡 Curiosidade:
COBOL foi projetado quando memória era absurdamente cara — por isso layouts são fixos e previsíveis.
⚔️ Parte 2 — Subscript vs Index: A Batalha dos Dois Caminhos
🔢 Subscript (o caminho do aprendiz)
MOVE EMP-NAME (WS-I) TO PRINT-NAME
✔ Simples
✔ Numérico
❌ Mais lento
❌ Recalcula endereço toda vez
⚡ Index (o caminho do Jedi)
05 EMP-ENTRY OCCURS 100 TIMES
INDEXED BY EMP-IDX.
Uso:
SET EMP-IDX TO 1
MOVE EMP-NAME (EMP-IDX) TO PRINT-NAME
✔ Ponteiro interno
✔ Muito mais eficiente
✔ Necessário para SEARCH
✔ Não é numérico
🧙♂️ Easter Egg técnico:
Internamente, o índice é um deslocamento binário — não um número “1, 2, 3”.
🪄 Parte 3 — O Erro que Entrega o Padawan
Se você já escreveu isso:
ADD 1 TO EMP-IDX
🚨 O compilador não apenas desaprova…
ele julga sua linhagem inteira.
Índice só aceita:
SET EMP-IDX UP BY 1
SET EMP-IDX DOWN BY 1
SET EMP-IDX TO 1
💡 Índice NÃO é variável numérica.
🔍 Parte 4 — SEARCH: A Varredura do Deserto
Busca sequencial:
SEARCH EMP-ENTRY
AT END DISPLAY "NOT FOUND"
WHEN EMP-ID (EMP-IDX) = TARGET-ID
DISPLAY "FOUND"
END-SEARCH
Características:
✔ Examina um a um
✔ Não precisa ordenar
✔ Começa na posição atual do índice
💎 Dica avançada:
SET EMP-IDX TO 5
Vai procurar do elemento 5 até o fim.
👉 Muito usado para retomar processamento após checkpoint.
🚀 Parte 5 — SEARCH ALL: O Salto no Hiperespaço
Busca binária:
SEARCH ALL EMP-ENTRY
WHEN EMP-ID (EMP-IDX) = TARGET-ID
DISPLAY "FOUND"
END-SEARCH
Mas cuidado…
⚠️ Regra de Ferro:
👉 A tabela DEVE estar ordenada pela chave da busca
Sem isso:
💀 Pode não encontrar valores existentes
💀 Não gera erro
💀 Bugs fantasma nas madrugadas de fechamento
📊 Comparação brutal
| Método | Comparações (1 milhão itens) |
|---|---|
| Serial | até 1.000.000 |
| Binária | ~20 |
💸 Sim, isso vira dinheiro na fatura de CPU.
🔄 Parte 6 — SORT em Memória: O Poder Esquecido
Poucos padawans sabem:
COBOL pode ordenar uma tabela OCCURS inteira.
SORT EMP-ENTRY ASCENDING KEY EMP-ID
Se não especificar chave…
👉 Usa a KEY definida na tabela.
ASCENDING KEY EMP-ID
🧬 Parte 7 — REDEFINES: O Lado Negro da Memória
Aqui começa a magia obscura.
01 RAW-DATA PIC X(24).
01 EMP-TABLE REDEFINES RAW-DATA.
05 EMP OCCURS 4 TIMES.
10 EMP-ID PIC 9(2).
10 EMP-NAME PIC X(4).
Nenhum byte é movido.
👉 Apenas reinterpretado.
🎯 Exemplo clássico
"10JOAO15MARIA20CARL"
Pode virar:
| ID | Nome |
|---|---|
| 10 | JOAO |
| 15 | MARIA |
| 20 | CARL |
💡 Isso é parsing sem custo de CPU.
🧹 Parte 8 — INITIALIZE: O Reset Jedi
INITIALIZE EMP-TABLE
Resultado:
✔ Alfanuméricos → espaços
✔ Numéricos → zeros
✈️ Variante poderosa
INITIALIZE EMP-TABLE
REPLACING ALPHANUMERIC DATA BY "ABC"
Todos os campos recebem "ABC".
📚 Parte 9 — VALUE: Carregando a Tabela na Compilação
01 CITY-TABLE VALUE "LHRPEKMELJFK".
02 CITY PIC X(3) OCCURS 4 TIMES.
Distribuição:
1 → LHR
2 → PEK
3 → MEL
4 → JFK
💡 Zero custo em runtime.
🏦 Parte 10 — O Que Bancos REALMENTE Fazem
Tabelas OCCURS são usadas para:
✔ Parâmetros carregados em memória
✔ Tabelas de códigos
✔ Conversões
✔ Regras de negócio
✔ Buffers massivos
✔ Lookups ultra rápidos
Em muitos sistemas críticos, elas substituem chamadas a banco.
🧠 Curiosidade Histórica
COBOL foi criado quando:
🧊 CPU era lenta
💾 Memória era caríssima
📼 Disco era ainda mais lento
Por isso:
👉 Processar em memória sempre foi o caminho do mestre.
🏆 Conclusão — O Segredo que Separa Padawans de Mestres
Se você entendeu este artigo…
Você aprendeu a:
✔ Controlar memória manualmente
✔ Otimizar CPU
✔ Implementar buscas eficientes
✔ Manipular dados sem cópia
✔ Pensar como um engenheiro mainframe
☕ Regra Suprema do Batch
“Quem domina tabelas… domina o tempo de execução.”