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

quinta-feira, 3 de novembro de 2022

COBOL número computational, os comps da vida


COBOL número computational, os comps da vida

Em COBOL, um número computational é um tipo de dado numérico armazenado em formato interno otimizado para processamento, em vez de formato textual. Ele é definido usando cláusulas como COMP, COMP-1, COMP-2, COMP-3, COMP-4 e COMP-5. Esses formatos permitem cálculos mais rápidos e eficientes, utilizando representação binária, decimal empacotada ou ponto flutuante. Números computacionais são amplamente usados em sistemas de mainframe para contadores, cálculos financeiros e operações matemáticas intensivas. A escolha do tipo correto garante melhor desempenho, precisão e compatibilidade com o hardware IBM z/OS.


1. COMPUTATIONAL-1 (COMP-1)

  • Uso principal: Representar números reais de ponto flutuante de precisão simples (single precision).

  • Formato interno:

    • Armazena números em 32 bits (4 bytes).

    • Compatível com operações matemáticas em ponto flutuante, permitindo frações.

  • Quando usar:

    • Para cálculos que envolvem valores decimais aproximados, como medições científicas, estatísticas ou cálculos financeiros que toleram pequenas imprecisões.

  • Exemplo de declaração:

01 SALDO PIC S9(7)V99 COMP-1.

Aqui V indica a posição decimal virtual; COMP-1 diz que será armazenado como 32-bit float.


2. COMPUTATIONAL-2 (COMP-2)

  • Uso principal: Representar números reais de ponto flutuante de precisão dupla (double precision).

  • Formato interno:

    • Armazena números em 64 bits (8 bytes).

    • Permite maior precisão e alcance do que COMP-1.

  • Quando usar:

    • Para cálculos que requerem alta precisão, como cálculos científicos complexos, engenharia ou finanças com grandes valores e frações pequenas.

  • Exemplo de declaração:

01 TAXA-INTERESSE PIC S9(9)V999 COMP-2.

💡 Dica Mainframe:

  • Evite usar COMP-1/COMP-2 para somas monetárias exatas, porque erros de arredondamento podem ocorrer. Para dinheiro, prefira PACKED-DECIMAL (COMP-3).

  • COMP-1 e COMP-2 são ideais para científico ou grande alcance numérico.


🔹 COMPUTATIONAL-3 (COMP-3)

O queridinho do mundo bancário

📌 O que é

  • Decimal empacotado (Packed Decimal)

  • Cada dígito ocupa 4 bits

  • Último nibble guarda o sinal (C/D/F)

📦 Armazenamento

  • 2 dígitos por byte

  • Muito compacto e exato

🧠 Para que serve

  • Valores monetários

  • Cálculos que NÃO podem ter erro de arredondamento

💰 Onde é usado

  • Bancos 🏦

  • Folha de pagamento

  • Sistemas financeiros

  • Contabilidade

🧪 Exemplo

01 SALDO-CONTA PIC S9(9)V99 COMP-3.

🕵️ Fofoquice mainframe

Se você fizer cálculo de dinheiro sem COMP-3, algum sysprog vai te xingar mentalmente.


🔹 COMPUTATIONAL-4 (COMP-4)

O binário antigo / compatível

📌 O que é

  • Número inteiro binário

  • Representação dependente do compilador

  • Hoje é tratado como sinônimo de COMP em muitos ambientes

📦 Armazenamento típico

  • 2 bytes → até 4 dígitos

  • 4 bytes → até 9 dígitos

  • 8 bytes → até 18 dígitos

🧠 Para que serve

  • Contadores

  • Índices

  • Quantidades

  • Performance melhor que COMP-3

🧪 Exemplo

01 TOTAL-REGISTROS PIC S9(9) COMP-4.

🕵️ Fofoquice mainframe

COMP-4 é aquele tio antigo: funciona, mas ninguém recomenda para sistemas novos.


🔹 COMPUTATIONAL-5 (COMP-5)

O binário moderno e rápido

📌 O que é

  • Binário puro de hardware

  • Totalmente compatível com o processador IBM Z

  • Não depende de PIC decimal

🚀 Performance

  • Mais rápido que COMP e COMP-4

  • Ideal para loops intensivos

🧠 Para que serve

  • Contadores grandes

  • Cálculos inteiros pesados

  • Alto desempenho

🧪 Exemplo

01 LOOP-COUNTER PIC S9(9) COMP-5.

⚠️ Atenção

  • Nunca use para dinheiro

  • Pode gerar resultados inesperados se misturado com decimais

🕵️ Easter-egg

Se você quer performance máxima, COMP-5 é o “turbo mode” do COBOL.


🧾 Comparação rápida (estilo prova)

TipoFormatoExatidãoPerformanceUso típico
COMP-3Decimal empacotado✅ ExataMédiaDinheiro
COMP-4Binário❌ InteiroBoaContadores
COMP-5Binário nativo❌ Inteiro🚀 AltaLoops, índices

🧠 Regra de ouro Bellacosa

💰 Dinheiro → COMP-3 🔢 Contador simples → COMP-4 ⚡ Performance → COMP-5 ❌ Nunca misture sem conversão

☠️ Erros clássicos (que dão ABEND ou bug fantasma)

  • Usar COMP-5 para valores monetários

  • Somar COMP-3 com COMP-5 sem MOVE intermediário

  • Definir PIC errado para binário

  • Converter automático e confiar “na sorte”

Mini-diagrama COBOL – Tipos Computacionais

TipoArmazenamentoTamanho típicoPrecisão / Uso principalObservações importantes
COMP-1Ponto flutuante32 bits (4 bytes)Números reais de precisão simples (float)Aproximado; cuidado com cálculos monetários
COMP-2Ponto flutuante64 bits (8 bytes)Números reais de precisão dupla (double float)Para cálculos científicos ou alta precisão
COMP-3Decimal empacotado1.5 bytes por 3 dígitosInteiros ou decimais exatos; usado para dinheiroEvita erros de arredondamento; mais lento que binário
COMP-4Binário nativo2, 4 ou 8 bytesInteiros; compatível com operações de hardware nativoDependente do compilador; às vezes usado em sistemas antigos
COMP-5Binário nativo2, 4 ou 8 bytesInteiros; compatível com hardware moderno (IEEE)Mais rápido; ideal para grandes cálculos inteiros

sábado, 10 de dezembro de 2011

🔥 DB2 DCLGEN para COBOL – Onde a Tabela Vira Código e o Código Vira Contrato 🔥

 

Bellacosa Mainframe apresenta o DCLGEN

🔥 DB2 DCLGEN para COBOL – Onde a Tabela Vira Código e o Código Vira Contrato 🔥



Se existe um ponto em que DB2, COBOL e disciplina se encontram, esse ponto se chama DCLGEN.

Quem já manteve sistema legado sabe:
👉 layout duplicado dá problema
👉 tipo mal definido vira bug
👉 desalinhamento vira incidente às 3h da manhã

O DCLGEN não é só uma ferramenta.
Ele é um pacto de não-agressão entre o banco e o programa.


🕰️ Um Pouco de História – Por Que o DCLGEN Existe?

Antes do DCLGEN, o programador:

  • Lia a DDL

  • “Interpretava” os tipos

  • Criava o layout na mão

  • Rezava

💡 Resultado:

  • Campos truncados

  • Decimais errados

  • -302 misterioso

A IBM, num raro momento de empatia com o ser humano, criou o DCLGEN (Declarations Generator):
👉 a definição oficial da tabela vira estrutura COBOL.

Menos interpretação.
Mais verdade.


🧬 O Que o DCLGEN Gera, de Fato?

Um DCLGEN padrão gera:

  1. EXEC SQL DECLARE TABLE

  2. Estrutura COBOL (01 / 05)

  3. EXEC SQL DECLARE CURSOR (opcional)

Tudo alinhado com:

  • Tipo

  • Tamanho

  • Precisão

  • Nulidade

💡 Regra de ouro Bellacosa:
Se não veio do DCLGEN, desconfie.


🧱 Tipos DB2 vs Tipos COBOL – Onde a Magia Acontece

Aqui mora a maioria dos bugs silenciosos.

🔢 NUMERIC / DECIMAL

DB2

DECIMAL(9,2)

COBOL (DCLGEN)

05 COL-VALOR       PIC S9(7)V99 COMP-3.

💡 Por quê COMP-3?
Porque DB2 armazena decimal compactado.
DISPLAY aqui é convite ao desastre.


🔠 CHAR / VARCHAR

DB2

CHAR(10)
VARCHAR(50)

COBOL

05 COL-NOME        PIC X(10).
05 COL-DESC-LEN    PIC S9(4) COMP.
05 COL-DESC-TEXT   PIC X(50).

💡 Curiosidade:
VARCHAR vira dois campos em COBOL.
Esqueceu do LENGTH? Vai ler lixo.

🥚 Easter egg clássico:
LENGTH negativo = dado inválido ou bug sorrateiro.


📅 DATE / TIME / TIMESTAMP

DB2

DATE
TIMESTAMP

COBOL

05 COL-DATA        PIC X(10).
05 COL-TS          PIC X(26).

💡 Comentário Bellacosa:
Não trate data DB2 como número.
Isso termina em lágrimas.


🔣 INTEGER / SMALLINT / BIGINT

DB2

INTEGER
SMALLINT
BIGINT

COBOL

05 COL-ID          PIC S9(9) COMP.
05 COL-COD         PIC S9(4) COMP.
05 COL-SEQ         PIC S9(18) COMP.

💡 Dica de sobrevivência:
Nunca use DISPLAY para inteiros DB2.
Nunca.


🚨 NULLs – O Inimigo Invisível

DB2 aceita NULL.
COBOL… não.

DCLGEN resolve isso com indicadores:

05 COL-VALOR       PIC S9(7)V99 COMP-3.
05 COL-VALOR-IND   PIC S9(4) COMP.
  • 0 → valor válido

  • -1 → NULL

💡 Dica Bellacosa:
Esqueceu de tratar indicador?
Parabéns, você acaba de criar um dump futuro.


🧪 Conversões Implícitas – Onde o DB2 Avisa (ou não)

DB2 até converte tipos…
Mas cobra juros.

  • CHAR → DECIMAL

  • DATE → CHAR

  • VARCHAR → FIXED

💡 Conhecimento de bastidor:
Conversão implícita custa CPU e pode quebrar índice.

👉 Converta no COBOL, não no SQL.


⚙️ DCLGEN no Mundo Moderno (Git, CI/CD, DevOps)

Hoje o DCLGEN:

  • É versionado no Git

  • Gerado automaticamente

  • Sincronizado com DDL

  • Integrado ao pipeline

💡 Regra de ouro moderna:
DDL mudou?
👉 gere novo DCLGEN
👉 recompile
👉 rebind

Sem atalhos.


🗣️ Fofoquices de Sala-Cofre

  • “Funcionava ontem” → tabela mudou

  • “Só aumentaram o tamanho” → DCLGEN não regenerado

  • “É só um campo novo” → layout desalinhado


🧠 Pensamento Final do El Jefe

DCLGEN não é burocracia.
É contrato.

Ele garante que:

  • O que o DB2 grava

  • É exatamente o que o COBOL lê

Sem achismo.
Sem “interpretação criativa”.

🔥 Regra final Bellacosa Mainframe:
Se a tabela é verdade,
o DCLGEN é a tradução oficial.

Todo o resto…
é boato que vira incidente. 💾🧠