Mostrar mensagens com a etiqueta OCCURS. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta OCCURS. Mostrar todas as mensagens

sexta-feira, 27 de fevereiro de 2026

☕ Se Você Ainda Usa Subscript… o Batch Já Está Rindo de Você

 

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étodoComparações (1 milhão itens)
Serialaté 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:

IDNome
10JOAO
15MARIA
20CARL

💡 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.”