Translate

Mostrar mensagens com a etiqueta Programação Mainframe. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Programação Mainframe. Mostrar todas as mensagens

quarta-feira, 28 de dezembro de 2022

Da Baixa Plataforma ao IBM Mainframe O Guia Definitivo para Desenvolvedores que Desejam Migrar para o IBM Z

 

Bellacosa Mainframe da baixa para a alta plataforma a jornada do padawan a stack mainframe

☕ Um Café no Bellacosa Mainframe

Da Baixa Plataforma ao IBM Mainframe

O Guia Definitivo para Desenvolvedores que Desejam Migrar para o IBM Z

Você não está voltando ao passado. Está descobrindo onde a Engenharia de Software aprendeu a nunca falhar.

Há uma pergunta que recebo praticamente todas as semanas.

"Vale a pena aprender Mainframe em 2026?"

Minha resposta continua exatamente a mesma.

Sim. E talvez hoje faça ainda mais sentido do que há dez anos.

Enquanto novas linguagens surgem todos os anos, existe uma plataforma que continua processando boa parte da economia mundial com disponibilidade próxima de 100%.

Essa plataforma é o IBM Z.

Mas este artigo não é sobre máquinas.

É sobre pessoas.

Sobre desenvolvedores que dominam Java, Python, C#, Delphi, Go, Rust, Kotlin, C++, Visual Basic e outras tecnologias e desejam entender como esse conhecimento pode abrir as portas do universo Mainframe.

Pegue um café.

Vamos conversar.


Antes de tudo: esqueça os mitos

Existe uma enorme quantidade de desinformação sobre Mainframe.

Você provavelmente já ouviu alguma destas frases:

  • "Mainframe morreu."

  • "Só existem sistemas antigos."

  • "COBOL é uma linguagem ultrapassada."

  • "Ninguém mais aprende isso."

  • "Tudo foi para a nuvem."

Na prática, basta observar quem movimenta bilhões de transações diariamente:

  • bancos;

  • seguradoras;

  • bolsas de valores;

  • companhias aéreas;

  • operadoras de cartão;

  • governos;

  • empresas de logística.

Em muitos casos, o coração desses negócios continua sendo o IBM Z.

Não porque seja antigo.

Mas porque funciona extraordinariamente bem.


Você não está trocando de profissão

Quem vem da baixa plataforma costuma imaginar que precisará começar do zero.

Não precisa.

Você continua sendo desenvolvedor.

Continua resolvendo problemas.

Continua escrevendo software.

A diferença está na prioridade.

Na baixa plataforma normalmente pensamos em:

  • experiência do usuário;

  • frameworks;

  • componentes;

  • bibliotecas;

  • deploy contínuo;

  • microsserviços.

Na alta plataforma pensamos em:

  • continuidade do negócio;

  • disponibilidade;

  • integridade dos dados;

  • desempenho previsível;

  • recuperação de falhas;

  • processamento em larga escala.

O objetivo muda.

A engenharia evolui.


O IBM Z não compete com a nuvem

Um erro comum é imaginar que Cloud e Mainframe disputam espaço.

Na realidade eles trabalham juntos.

Hoje encontramos ambientes onde:

  • APIs REST expõem programas COBOL;

  • Java executa no z/OS;

  • Linux roda dentro do IBM Z;

  • Kubernetes conversa com aplicações corporativas;

  • OpenShift integra workloads;

  • IA analisa dados produzidos pelo Mainframe;

  • Git e VS Code fazem parte do dia a dia.

O IBM Z moderno é uma plataforma integrada ao restante da arquitetura corporativa.


Esqueça a pergunta "Qual linguagem é melhor?"

Essa pergunta perde completamente o sentido no mundo corporativo.

Cada tecnologia resolve problemas diferentes.

Python resolve problemas.

Java resolve problemas.

Rust resolve problemas.

COBOL resolve problemas.

A verdadeira pergunta é:

Qual tecnologia oferece menor risco para aquele negócio?

É exatamente aí que o Mainframe se destaca.


O que realmente muda?

Muito menos do que você imagina.

Você continuará trabalhando com:

  • variáveis;

  • estruturas condicionais;

  • repetições;

  • funções;

  • módulos;

  • arquivos;

  • bancos de dados;

  • APIs;

  • mensagens.

O que muda é a forma de organizar esses componentes.


As maiores mudanças de mentalidade

Disponibilidade

Na Web um servidor pode reiniciar.

Num banco isso pode significar milhões de reais.


Performance previsível

Não basta ser rápido.

É preciso manter o mesmo desempenho durante milhões de transações.


Integridade

Cada registro possui valor financeiro.

Cada atualização precisa ser consistente.


Auditoria

Tudo precisa ser rastreável.


Segurança

Segurança deixa de ser funcionalidade.

Passa a ser requisito básico.


O ecossistema IBM Z

Aprender apenas COBOL é conhecer apenas uma pequena parte da plataforma.

Você encontrará tecnologias como:

  • COBOL

  • JCL

  • CICS

  • Db2

  • IMS

  • VSAM

  • MQ

  • RACF

  • TSO/ISPF

  • SDSF

  • JES2

  • REXX

  • z/OS

  • z/OS Connect

  • Zowe

  • Git

  • VS Code

  • OpenShift

  • Ansible

  • Java

  • Python

É um ecossistema completo.


A melhor estratégia de aprendizagem

Não tente aprender tudo ao mesmo tempo.

Minha recomendação é:

Primeira etapa

  • Conceitos do Mainframe

  • z/OS

  • Dataset

  • Batch

  • Online

Segunda etapa

  • TSO/ISPF

  • JCL

  • SDSF

Terceira etapa

  • COBOL

Quarta etapa

  • Db2

  • VSAM

Quinta etapa

  • CICS

Depois disso você poderá seguir para:

  • APIs

  • MQ

  • DevOps

  • Git

  • Zowe

  • Java

  • Python

  • IA aplicada ao IBM Z


Escolha sua linguagem de origem

Preparei uma série mostrando como cada tecnologia conversa com o universo IBM Z.

☕ Java → COBOL

https://eljefemidnightlunch.blogspot.com/2022/01/do-java-ao-cobol-no-ibm-z-um-guia-para.html

Para quem já desenvolve aplicações corporativas.


☕ Python → COBOL

https://eljefemidnightlunch.blogspot.com/2022/02/de-python-ao-cobol-no-ibm-z-voce-nao.html

Automação, produtividade e integração.


☕ C# → COBOL

https://eljefemidnightlunch.blogspot.com/2022/03/de-c-ao-cobol-no-ibm-z-voce-nao-esta.html

A ponte entre aplicações Microsoft e IBM Z.


☕ Visual Basic → COBOL

https://eljefemidnightlunch.blogspot.com/2022/04/do-visual-basic-ao-cobol-no-ibm-z-voce.html

Quem domina regras de negócio já possui uma enorme vantagem.


☕ Go → COBOL

https://eljefemidnightlunch.blogspot.com/2022/05/de-go-ao-cobol-no-ibm-z-voce-nao-esta.html

Simplicidade encontra estabilidade.


☕ Rust → COBOL

https://eljefemidnightlunch.blogspot.com/2022/06/de-rust-ao-cobol-no-ibm-z-voce-nao-esta.html

Segurança de memória aplicada aos sistemas mais críticos do mundo.


☕ C++ → COBOL

https://eljefemidnightlunch.blogspot.com/2022/07/de-c-ao-cobol-no-ibm-z-voce-nao-esta.html

Arquitetura, desempenho e controle.


☕ Kotlin → COBOL

https://eljefemidnightlunch.blogspot.com/2022/08/de-kotlin-ao-cobol-no-ibm-z-voce-nao.html

A produtividade moderna chegando aos sistemas corporativos.


☕ Delphi → COBOL

https://eljefemidnightlunch.blogspot.com/2022/09/de-delphi-ao-cobol-no-ibm-z-voce-nao.html

RAD, regras de negócio e engenharia corporativa.


Conselhos para quem está começando

✔ Não compare COBOL com Java.

✔ Não compare z/OS com Windows.

✔ Não tente aprender tudo em uma semana.

✔ Leia programas antigos.

✔ Entenda o negócio antes do código.

✔ Aprenda a usar o teclado.

✔ Estude JCL cedo.

✔ Aprenda a interpretar mensagens do sistema.

✔ Não tenha medo da tela preta.

✔ Nunca pare de estudar.


Conclusão

O IBM Z continua sendo uma das plataformas mais importantes da computação mundial.

Ele não representa o passado da tecnologia.

Representa décadas de evolução em disponibilidade, segurança, desempenho e confiabilidade.

Se você domina qualquer linguagem moderna, já possui o ingrediente mais importante: sabe resolver problemas.

Aprender Mainframe significa adicionar uma nova perspectiva à sua carreira e compreender como funcionam alguns dos sistemas mais críticos do planeta.

No Bellacosa Mainframe acreditamos que o melhor desenvolvedor não é aquele que conhece apenas uma plataforma.

É aquele que consegue transitar entre todas elas, levando consigo boas práticas, curiosidade e respeito pela engenharia de software.

 

sábado, 16 de junho de 2018

☕🔥 SQL NO DB2 MAINFRAME — O “SELECT *” QUE PODE DERRUBAR UM BANCO INTEIRO

 

Belalcosa Mainframe e o sql matador de db2

☕🔥 SQL NO DB2 MAINFRAME — O “SELECT *” QUE PODE DERRUBAR UM BANCO INTEIRO

Todo iniciante em SQL aprende algo assim:

SELECT * FROM CLIENTES;

E pensa:

“Pronto. Sei SQL.”

Mas no universo IBM Mainframe + DB2…

isso é apenas o começo da guerra.

Porque no mundo corporativo REAL:

🔥 SQL não é apenas consulta.
SQL é sobrevivência operacional.

Cada comando pode impactar:

  • CPU

  • I/O

  • Buffer Pool

  • Locks

  • Access Path

  • Throughput

  • Batch Window

  • SLA bancário

E é aí que o DB2 z/OS entra em outro nível de engenharia.


☕ O DB2 NÃO FOI FEITO PARA “PROJETINHOS”

O DB2 Mainframe nasceu para:

  • bancos globais

  • bolsas financeiras

  • cartões

  • telecom

  • seguradoras

  • governo

  • processamento massivo

Enquanto bancos menores pensam em simplicidade…

o DB2 pensa em:

🔥 bilhões de linhas simultaneamente.


☕🔥 1. SELECT ALL RECORDS — O COMANDO MAIS PERIGOSO PARA INICIANTES

A famosa query:

SELECT *
FROM EMPLOYEES;

parece inocente.

No DB2 z/OS?

Pode virar tragédia.


☕ O PROBLEMA DO SELECT *

Ele traz:

  • todas as colunas

  • dados desnecessários

  • mais I/O

  • mais GETPAGE

  • mais CPU

  • mais tráfego


☕ Em produção isso custa dinheiro REAL

O profissional Mainframe aprende cedo:

“Nunca peça ao DB2 mais do que você realmente precisa.”


☕ Forma correta:

SELECT
    NAME,
    SALARY
FROM EMPLOYEES;

☕ Por quê?

Porque no Mainframe:

🔥 performance é cultura.


☕ Bellacosa Mainframe Analysis™

SELECT * em produção é como:

COPIAR TODOS OS DATASETS DA EMPRESA
PARA LER APENAS UMA LINHA

☕🔥 2. SELECT SPECIFIC COLUMNS — O PENSAMENTO MAINFRAME

Agora começamos a entrar na mentalidade correta.


☕ Query:

SELECT
    NAME,
    SALARY
FROM EMPLOYEES;

☕ O que o DB2 gosta?

  • menos páginas lidas

  • menos movimentação

  • menos memória

  • menos sorting

  • menos rede


☕ Isso melhora:

✅ cache
✅ buffer pool
✅ response time
✅ throughput


☕ Em APIs REST isso é ainda mais importante

Porque hoje:

APP MOBILE
   ↓
API REST
   ↓
DB2 z/OS

Cada byte importa.


☕🔥 3. WHERE CLAUSE — O VERDADEIRO CAMPO DE BATALHA

Aqui nasce a diferença entre:

🧠 “quem escreve SQL”
e
🔥 “quem entende DB2”.


☕ Exemplo:

SELECT *
FROM EMPLOYEES
WHERE SALARY > 50000;

☕ Parece simples.

Mas o DB2 analisa:

  • índice

  • cardinalidade

  • filter factor

  • clustering

  • access path

  • stage 1/stage 2


☕🔥 STAGE 1 vs STAGE 2

Conceito clássico do DB2 z/OS.


☕ Stage 1

Mais rápido.

Executado próximo ao Data Manager.


☕ Stage 2

Mais CPU.

Mais custo.

Mais sofrimento operacional.


☕ Exemplo RUIM:

WHERE YEAR(DATAADM) = 2025

Pode inutilizar índice.


☕ Melhor:

WHERE DATAADM >= '2025-01-01'
AND DATAADM <  '2026-01-01'

Agora o índice pode respirar.


☕🔥 4. ORDER BY — O SORT INVISÍVEL QUE DEVORA CPU

Agora chegamos numa armadilha clássica.


☕ Query:

SELECT *
FROM EMPLOYEES
ORDER BY SALARY DESC;

☕ O que isso significa internamente?

Possivelmente:

🔥 SORT.

E SORT custa caro.


☕ O DB2 tenta evitar isso usando:

  • índices

  • clustering

  • ordering natural


☕ Exemplo inteligente

Índice:

SALARY DESC

O DB2 pode evitar sort completamente.


☕ DBA Mainframe AMA isso

Porque reduz:

  • tempo batch

  • consumo CPU

  • workfiles


☕🔥 5. GROUP BY — O NASCIMENTO DA INTELIGÊNCIA CORPORATIVA

Agora o SQL começa a virar BI.


☕ Exemplo:

SELECT
    DEPARTMENT,
    COUNT(*)
FROM EMPLOYEES
GROUP BY DEPARTMENT;

☕ Isso parece simples…

Mas alimenta:

  • relatórios financeiros

  • dashboards

  • analytics

  • auditoria

  • compliance


☕ O perigo oculto

GROUP BY pode gerar:

🔥 SORT massivo.


☕ E no DB2 isso significa:

  • WORKFILES

  • TEMP DATABASE

  • I/O pesado

  • CPU alta


☕🔥 O OTIMIZADOR DO DB2 — A ENTIDADE “MISTERIOSA”

Pouca gente entende o poder disso.

O DB2 Optimizer decide:

  • qual índice usar

  • qual join executar

  • qual caminho custa menos


☕ E ele faz isso baseado em:

  • RUNSTATS

  • cardinalidade

  • histogramas

  • distribuição de dados


☕ Sem RUNSTATS atualizado?

🔥 O access path pode virar desastre.


☕ Por isso DBA Mainframe é tão valorizado

Porque tuning em DB2 é quase arte.


☕🔥 LOCKS — O TERROR SILENCIOSO

Aqui começa a engenharia pesada.


☕ Uma query ruim pode causar:

  • lock escalation

  • deadlock

  • timeout

  • contention


☕ Exemplo clássico

SELECT *
FROM CONTAS
FOR UPDATE

Sem critério?

🔥 caos operacional.


☕ No Mainframe milhares acessam simultaneamente

Então concorrência é assunto sagrado.


☕🔥 COMMIT — O DETALHE QUE SALVA PRODUÇÃO

Em batch COBOL + DB2:

EXEC SQL
   COMMIT
END-EXEC

não é detalhe.

É sobrevivência.


☕ Sem COMMIT correto:

  • locks persistem

  • logs crescem

  • rollback explode

  • performance cai


☕🔥 O DB2 NÃO PENSA COMO BANCO “COMUM”

Ele pensa como:

um sistema operacional de dados corporativos.


☕ Porque ele precisa garantir:

✅ integridade
✅ recuperação
✅ disponibilidade
✅ paralelismo
✅ auditoria
✅ performance

24x7.


☕🔥 O QUE O MAINFRAME ENSINA SOBRE SQL

SQL no notebook do estudante:

SELECT *
FROM TESTE;

☕ SQL no Mainframe:

QUAL O IMPACTO DISSO NO BUFFER POOL?
VAI GERAR SORT?
USA ÍNDICE?
QUAL O ACCESS PATH?
VAI CAUSAR LOCK?
TEM RUNSTATS?

☕ É outro universo.


☕🔥 O VERDADEIRO PODER DO DB2

O DB2 não ficou vivo por décadas por acaso.

Ele sobreviveu porque consegue:

🔥 processar absurdos de dados sem parar.


☕ PIX.

☕ cartões.
☕ bolsas financeiras.
☕ reservas aéreas.
☕ telecom.
☕ bancos globais.

Tudo isso continua dependendo de SQL rodando em z/OS.


☕🔥 CONCLUSÃO — SQL NO MAINFRAME NÃO É “LINGUAGEM”

É engenharia de missão crítica.

E talvez essa seja a maior diferença entre:

  • aprender SQL
    e

  • entender DB2 Mainframe.

Porque no fim:

🔥 uma query mal escrita pode custar milhões.

segunda-feira, 12 de março de 2018

☕🔥 SQL NO DB2 MAINFRAME — A LINGUAGEM QUE MOVE O DINHEIRO DO PLANETA (E QUE MUITA GENTE USA SEM ENTENDER)

 

Bellacosa Mainframe e a linguagem sql do db2

☕🔥 SQL NO DB2 MAINFRAME — A LINGUAGEM QUE MOVE O DINHEIRO DO PLANETA (E QUE MUITA GENTE USA SEM ENTENDER)

Hoje existe uma geração inteira que aprendeu SQL em:

  • MySQL

  • PostgreSQL

  • SQL Server

  • SQLite

  • cursos rápidos de Data Analytics

E aí nasce uma ilusão perigosa:

“SQL é só SELECT.”

Só que quando alguém entra no universo do DB2 Mainframe…

descobre rapidamente que SQL corporativo REAL é outra dimensão.

Porque no IBM Mainframe, SQL não é apenas consulta.

🔥 SQL no DB2 é infraestrutura crítica mundial.

É ele que movimenta:

  • bancos

  • cartões

  • seguradoras

  • bolsas de valores

  • governos

  • companhias aéreas

  • telecomunicações

E o mais impressionante:

👉 Grande parte do planeta depende diariamente de comandos SQL rodando em DB2 no z/OS.


☕ O QUE TORNA O DB2 MAINFRAME DIFERENTE?

Muita gente pensa:

“SQL é tudo igual.”

Não.

O DB2 z/OS foi construído para:

  • altíssimo volume

  • concorrência extrema

  • integridade transacional

  • recuperação sofisticada

  • segurança corporativa

  • bilhões de linhas

  • milhares de usuários simultâneos

Enquanto bancos menores focam simplicidade…

o DB2 Mainframe foi projetado para sobreviver ao caos corporativo.


☕🔥 SECTION 1 — SELECT: O COMANDO MAIS SUBESTIMADO DA HISTÓRIA

Todo mundo aprende:

SELECT * FROM CLIENTES;

E acha que domina SQL.

No Mainframe isso pode virar um desastre.


☕ O “SELECT *” É QUASE UMA HERESIA NO DB2

Em ambientes críticos:

SELECT *

pode causar:

  • I/O desnecessário

  • uso excessivo de buffer pool

  • degradação de CPU

  • aumento de GETPAGE

  • piora no access path


☕ O PROFISSIONAL MAINFRAME PENSA DIFERENTE

Ele faz:

SELECT
    NOME,
    SALDO,
    LIMITE
FROM CLIENTES
WHERE ID_CLIENTE = :WS-ID

Somente os campos necessários.


☕ Por quê?

Porque no z/OS:

🔥 performance é religião.


☕🔥 O OTIMIZADOR DO DB2 É UMA ENTIDADE QUASE “VIVA”

Pouca gente entende isso.

O DB2 Optimizer:

  • escolhe access path

  • decide índice

  • calcula custo

  • analisa estatísticas

  • estima cardinalidade

Tudo automaticamente.


☕ Exemplo clássico

Mesma query.

Dois ambientes.

Performances totalmente diferentes.

Por quê?

Porque:

  • RUNSTATS mudou

  • índices mudaram

  • volume mudou

  • clustering mudou

O Optimizer escolheu outro caminho.


☕🔥 SECTION 2 — WHERE: O LUGAR ONDE NASCEM AS GUERRAS DE PERFORMANCE

Aqui mora o verdadeiro poder do SQL.


☕ Exemplo simples

SELECT *
FROM CONTAS
WHERE CPF = '12345678900'

☕ Parece inocente…

Mas no DB2 Mainframe isso envolve:

  • matching columns

  • indexability

  • stage 1/stage 2 predicates

  • filter factor

  • synchronous I/O

  • list prefetch


☕🔥 STAGE 1 vs STAGE 2 — O TERROR DOS INICIANTES

No DB2:

Stage 1

Mais eficiente.

Executado mais próximo do Data Manager.


Stage 2

Mais custoso.

Mais CPU.

Mais processamento.


☕ Exemplo ruim

WHERE YEAR(DATA) = 2025

Pode inutilizar índice.


☕ Melhor abordagem

WHERE DATA >= '2025-01-01'
AND DATA <  '2026-01-01'

Agora o índice pode trabalhar.

🔥 Isso é mentalidade mainframe.


☕🔥 SECTION 3 — ORDER BY: O “SORT INVISÍVEL” QUE DESTRÓI BATCHES

Muita gente não percebe:

ORDER BY

quase sempre significa:

🔥 SORT.

E SORT em grandes volumes pode custar caro.


☕ O que o DB2 tenta fazer?

Evitar sort.


☕ Como?

Usando índice na ordem correta.

Exemplo:

Índice:

CPF ASC

Query:

ORDER BY CPF

O DB2 pode evitar sort completamente.


☕🔥 SECTION 4 — FUNÇÕES DE AGREGAÇÃO: O PODER ANALÍTICO CORPORATIVO

Aqui o DB2 vira máquina de inteligência.


☕ COUNT

SELECT COUNT(*)
FROM TRANSACOES

☕ Em Mainframe isso pode significar:

  • milhões

  • bilhões

  • trilhões

de registros.


☕ O detalhe assustador

Em grandes ambientes:

COUNT(*)

mal otimizado pode consumir recursos absurdos.


☕🔥 SUM e AVG NO MUNDO FINANCEIRO

SELECT SUM(VALOR)
FROM PIX

Isso movimenta literalmente bilhões de reais.


☕ Precisão no Mainframe é crítica

Erro de arredondamento?

🔥 Catástrofe financeira.


☕🔥 SECTION 5 — GROUP BY: O CÉREBRO DOS RELATÓRIOS CORPORATIVOS

O GROUP BY é onde SQL começa a parecer inteligência artificial corporativa.


☕ Exemplo

SELECT
    AGENCIA,
    SUM(SALDO)
FROM CONTAS
GROUP BY AGENCIA

☕ Isso permite:

  • analytics

  • BI

  • auditoria

  • relatórios financeiros

  • antifraude


☕ O perigo oculto

GROUP BY pode gerar:

  • grandes SORTs

  • WORKFILES gigantes

  • uso excessivo de TEMP DB


☕🔥 SECTION 6 — HAVING: O FILTRO “PÓS-INTELIGÊNCIA”

HAVING filtra após agregação.


☕ Exemplo

SELECT
    AGENCIA,
    COUNT(*)
FROM CONTAS
GROUP BY AGENCIA
HAVING COUNT(*) > 1000

☕ O detalhe técnico

HAVING normalmente custa mais que WHERE.

Porque:

  • primeiro agrega

  • depois filtra


☕🔥 SECTION 7 — JOINS: O CAMPO DE BATALHA DO DB2

Aqui mora a verdadeira engenharia SQL.


☕ Nested Loop Join

Bom para pequenos volumes.


☕ Merge Scan Join

Excelente para grandes conjuntos ordenados.


☕ Hybrid Join

Mistura estratégias.


☕ O DBA Mainframe vive disso

Analisando:

  • PLAN_TABLE

  • EXPLAIN

  • access path

  • RID list

  • prefetch


☕ Exemplo clássico

SELECT *
FROM CLIENTE C
JOIN CONTA X
ON C.ID = X.ID_CLIENTE

☕ Parece simples…

Mas por trás o DB2 pode fazer:

  • tablespace scan

  • index scan

  • sort merge

  • parallelism


☕🔥 SECTION 8 — LIMIT/FETCH FIRST: O SALVADOR DA CPU

No mundo distribuído usam:

LIMIT 10

No DB2 z/OS:

FETCH FIRST 10 ROWS ONLY

☕ Isso reduz:

  • CPU

  • I/O

  • tempo de resposta


☕ Muito usado em:

  • APIs REST

  • dashboards

  • consultas online

  • mobile


☕🔥 SECTION 9 — ALIAS: A LEITURA HUMANA DO CAOS

Grandes queries corporativas ficam monstruosas.

Alias salva vidas.


☕ Exemplo

SELECT
    C.NOME,
    X.SALDO
FROM CLIENTE C,
     CONTA X

☕ Sem alias?

Viraria insanidade visual.


☕🔥 SECTION 10 — CASE: A INTELIGÊNCIA EMBUTIDA NO SQL

CASE transforma SQL em mecanismo decisório.


☕ Exemplo

SELECT
CASE
   WHEN SALDO < 0
      THEN 'DEVEDOR'
   ELSE 'POSITIVO'
END
FROM CONTAS

☕ O Mainframe usa isso em:

  • scoring

  • antifraude

  • classificação

  • regras de negócio

  • compliance


☕🔥 O QUE OS CURSOS DE SQL NORMALMENTE NÃO ENSINAM

No DB2 Mainframe existem conceitos avançados gigantescos:

  • locking

  • isolation level

  • package

  • bind

  • commit

  • rollback

  • UR/CS/RS/RR

  • deadlock

  • claim/drain

  • RID pool

  • EDM pool

  • buffer pool

Aí o jogo muda completamente.


☕🔥 O DB2 NÃO É “SÓ UM BANCO”

Ele é:

um sistema operacional de dados corporativos.


☕🔥 A GRANDE VERDADE

O SQL que roda no notebook do estudante…

e o SQL que roda no z/OS…

podem parecer iguais.

Mas estão separados por:

  • escala

  • criticidade

  • engenharia

  • confiabilidade

  • performance

  • complexidade


☕🔥 CONCLUSÃO — SQL NO MAINFRAME NÃO É MODA. É SOBREVIVÊNCIA.

No mundo moderno:

  • apps falham

  • containers reiniciam

  • microsserviços quebram

Mas o DB2 continua lá.

Processando:

  • pagamentos

  • cartões

  • PIX

  • reservas aéreas

  • bolsas financeiras

24x7.

E talvez essa seja a maior lição do Mainframe:

🔥 “SQL não é apenas consulta.
É a linguagem silenciosa que mantém a economia mundial funcionando.”


domingo, 25 de março de 2007

O que é DL/I em IMS?

 

Bellacosa Mainframe analisando o DL/I em IMS

O que é DL/I em IMS?

O DL/I (Data Language/I) é a linguagem de acesso a dados e transações utilizada pelo IMS (Information Management System) da IBM.

Ele funciona como uma interface entre os programas (COBOL, PL/I, Assembler) e os bancos de dados hierárquicos do IMS.

De forma simples:

Programa COBOL
       ↓
      DL/I
       ↓
Banco IMS

O que Significa DL/I?

DL/I
Data Language / Interface

É a API original criada pela IBM para acessar bancos IMS.


Por que o DL/I Foi Criado?

Na década de 1960, não existia SQL.

O IMS armazenava dados em estruturas hierárquicas.

Para acessar esses dados era necessário um mecanismo específico.

A IBM criou então:

DL/I

DL/I é o SQL do IMS?

De certa forma, sim.

Compare:

DB2

SELECT *
FROM CLIENTE
WHERE CPF = '12345678900'

IMS DL/I

GU CLIENTE

seguido da navegação hierárquica.


Estrutura Hierárquica do IMS

Exemplo:

CLIENTE
   │
   ├── CONTA
   │      │
   │      └── MOVIMENTO
   │
   └── CARTAO

Como o DL/I Navega?

O DL/I percorre a hierarquia.

CLIENTE
   ↓
CONTA
   ↓
MOVIMENTO

Tipos de Chamadas DL/I

O DL/I trabalha através de comandos conhecidos como:

CALL DL/I

Exemplo COBOL:

CALL 'CBLTDLI'
     USING GU
           PCB-MASK
           AREA-CLIENTE
           SSA-CLIENTE.

Principais Comandos DL/I

GU

Get Unique

Busca um registro específico.


Exemplo:

GU CLIENTE

Resultado:

CLIENTE 12345

GN

Get Next

Busca o próximo segmento.


Exemplo:

CLIENTE 1
CLIENTE 2
CLIENTE 3

Fluxo:

GN
↓
Próximo registro

GNP

Get Next Within Parent

Busca o próximo filho.


Exemplo:

CLIENTE
   │
   ├── CONTA1
   ├── CONTA2
   └── CONTA3

Com:

GNP

navega entre as contas.


GHU

Get Hold Unique

Lê e bloqueia registro.


Utilizado antes de atualização.


GHN

Get Hold Next

Lê próximo registro com bloqueio.


ISRT

Insert

Insere novo segmento.


Exemplo:

Novo Cliente

COBOL:

CALL 'CBLTDLI'
     USING ISRT
           PCB-MASK
           AREA-CLIENTE.

REPL

Replace

Atualiza registro existente.


Fluxo:

GHU
 ↓
REPL

DLET

Delete

Remove segmento.


Fluxo:

GHU
 ↓
DLET

Exemplo Completo

Banco IMS:

CLIENTE
    ↓
CONTA

Passo 1

Buscar cliente.

GU

Passo 2

Alterar dados.

GHU

Passo 3

Atualizar.

REPL

SSA (Segment Search Argument)

Equivalente ao WHERE do SQL.


SQL:

WHERE CPF='123'

DL/I:

CLIENTE(CPF=123)

Exemplo

01 SSA-CLIENTE.
   05 FILLER PIC X(8)
      VALUE 'CLIENTE('.

PCB

Program Communication Block

Define o acesso ao banco.


Exemplo:

PCB CLIENTE

Contém:

  • Status

  • Banco

  • Permissões


Status Codes

Após cada chamada DL/I.


Espaços

'  '

Sucesso.


GE

GE

Registro não encontrado.


GB

GB

Fim de banco.


II

II

Inserção inválida.


Exemplo de Leitura Sequencial

GU
 ↓
GN
 ↓
GN
 ↓
GN

Resultado:

CLIENTE1
CLIENTE2
CLIENTE3
CLIENTE4

Exemplo COBOL

CALL 'CBLTDLI'
     USING GU
           PCB-CLIENTE
           REG-CLIENTE
           SSA-CLIENTE.

Verificando retorno:

IF PCB-STATUS = '  '
   DISPLAY 'ENCONTRADO'
END-IF.

DL/I em Ambiente Online

Muito comum em:

CICS
IMS TM

Fluxo:

Terminal
    ↓
IMS TM
    ↓
COBOL
    ↓
DL/I
    ↓
IMS DB

DL/I em Batch

Também muito utilizado.

JOB
 ↓
COBOL
 ↓
DL/I
 ↓
IMS DB

Comparação SQL x DL/I

SQL (DB2)DL/I (IMS)
SELECTGU/GN
INSERTISRT
UPDATEREPL
DELETEDLET
WHERESSA
CursorGN
LockGHU

Vantagens do DL/I

✅ Extremamente rápido

✅ Baixo consumo de CPU

✅ Excelente para grandes volumes

✅ Muito usado em bancos

✅ Altamente confiável


Curiosidades

1. O DL/I surgiu antes do SQL

2. Foi criado para o Projeto Apollo da NASA

3. Ainda processa bilhões de transações diariamente

4. Continua amplamente utilizado em bancos e seguradoras

5. É uma das APIs de banco de dados mais antigas ainda em produção


Resumo Rápido

ComandoFunção
GUGet Unique
GNGet Next
GNPGet Next Within Parent
GHUGet Hold Unique
GHNGet Hold Next
ISRTInsert
REPLReplace
DLETDelete
SSACritério de busca
PCBControle de acesso

Conclusão

O DL/I (Data Language/I) é a interface de acesso ao banco de dados IMS. Ele permite que programas COBOL, PL/I e Assembler leiam, insiram, atualizem e removam segmentos em bancos hierárquicos IMS por meio de comandos como GU, GN, ISRT, REPL e DLET. Embora seja anterior ao SQL, continua sendo uma das tecnologias mais importantes do universo Mainframe, sustentando aplicações críticas em bancos, governos, seguradoras e grandes corporações ao redor do mundo.


quarta-feira, 7 de março de 2007

O que é o Comando DISPLAY em COBOL?

 

Bellacosa Mainframe e o comando display em cobol

O que é o Comando DISPLAY em COBOL?

O comando DISPLAY é uma das instruções mais simples e mais utilizadas do COBOL.

Sua função é:

exibir informações na tela, terminal, log ou SYSOUT.

Ele é equivalente a comandos como:

  • PRINT (BASIC)

  • printf() (C)

  • System.out.println() (Java)

  • print() (Python)


Para que serve o DISPLAY?

O DISPLAY é utilizado para:

  • mostrar mensagens;

  • exibir variáveis;

  • acompanhar processamento;

  • depurar programas;

  • registrar informações no SYSOUT.


Sintaxe básica

DISPLAY item

Exemplo simples

DISPLAY 'OLA MUNDO'

Saída:

OLA MUNDO

Exibindo uma variável

01 WS-NOME PIC X(20).

MOVE 'VAGNER' TO WS-NOME

DISPLAY WS-NOME

Resultado:

VAGNER

Exibindo texto e variável

DISPLAY 'CLIENTE: ' WS-NOME

Saída:

CLIENTE: VAGNER

Analogia simples

Imagine um operador olhando o console.

O DISPLAY envia informações para ele:

PROGRAMA
    ↓
DISPLAY
    ↓
TELA / SYSOUT

DISPLAY em Batch

No ambiente z/OS batch, normalmente o DISPLAY não aparece diretamente na tela.

Ele é gravado no:

  • SYSOUT

  • JES2

  • Spool

  • SDSF


Exemplo

DISPLAY 'PROCESSAMENTO INICIADO'

No SDSF aparecerá algo semelhante:

PROCESSAMENTO INICIADO

DISPLAY para Debug

Uma das utilizações mais comuns.

DISPLAY 'SALDO = ' WS-SALDO

Ajuda a verificar:

  • valores;

  • fluxo;

  • erros;

  • cálculos.


Exemplo de depuração

MOVE 1000 TO WS-SALDO

DISPLAY 'ANTES CALCULO: '
        WS-SALDO

Resultado:

ANTES CALCULO: 1000

DISPLAY de números

01 WS-VALOR PIC 9(5).

MOVE 12345 TO WS-VALOR

DISPLAY WS-VALOR

Saída:

12345

DISPLAY de COMP-3

Nem sempre gera saída legível.

Exemplo:

01 WS-SALDO PIC S9(7)V99 COMP-3.

Antes de exibir, normalmente usa-se:

MOVE WS-SALDO TO WS-EDITADO
DISPLAY WS-EDITADO

DISPLAY de datas

DISPLAY FUNCTION CURRENT-DATE

Exemplo:

2026060215304599

DISPLAY com Funções Intrínsecas

DISPLAY FUNCTION UPPER-CASE(WS-NOME)

Resultado:

VAGNER

DISPLAY em Programas Interativos

Muito comum em:

  • TSO;

  • Micro Focus;

  • GnuCOBOL;

  • ambientes educacionais.


Exemplo

DISPLAY 'DIGITE O NOME:'
ACCEPT WS-NOME

DISPLAY e ACCEPT

São comandos complementares.


DISPLAY:

DISPLAY 'INFORME O CPF'

Mostra informação.


ACCEPT:

ACCEPT WS-CPF

Recebe informação.


Fluxo típico

DISPLAY
     ↓
USUÁRIO VISUALIZA
     ↓
ACCEPT
     ↓
USUÁRIO DIGITA

DISPLAY UPON

Permite direcionar saída para dispositivos específicos.


Exemplo:

DISPLAY WS-MENSAGEM
        UPON CONSOLE

DISPLAY UPON CONSOLE

Muito usado por operadores e Sysprogs.

DISPLAY 'JOB FINALIZADO'
        UPON CONSOLE

Mensagem enviada ao console do sistema.


DISPLAY em CICS

Em aplicações CICS normalmente utiliza-se:

EXEC CICS SEND

mas DISPLAY ainda pode ser usado para debug.


DISPLAY no SYSOUT

Exemplo de saída:

INICIO PROCESSAMENTO

CLIENTE = 12345

SALDO = 5000.00

FIM PROCESSAMENTO

Exemplo completo

IDENTIFICATION DIVISION.
PROGRAM-ID. TESTE.

DATA DIVISION.

WORKING-STORAGE SECTION.

01 WS-NOME PIC X(20).

PROCEDURE DIVISION.

    MOVE 'BELLACOSA'
         TO WS-NOME

    DISPLAY 'NOME: '
            WS-NOME

    STOP RUN.

Resultado:

NOME: BELLACOSA

Onde o DISPLAY é mais usado?

Batch

Mensagens no SYSOUT.


Debug

Análise de variáveis.


Testes

Validação de resultados.


Ensino COBOL

Primeiros programas.


Operação

Mensagens para operadores.


Curiosidades

1. DISPLAY é normalmente o primeiro comando aprendido em COBOL


2. Grande parte dos testes iniciais utiliza DISPLAY


3. Em batch, o DISPLAY geralmente vai para o spool JES2


4. Muitos programadores usam DISPLAY para investigar ABENDs


DISPLAY vs ACCEPT

ComandoFunção
DISPLAYExibe dados
ACCEPTRecebe dados

DISPLAY vs WRITE

ComandoDestino
DISPLAYTela/SYSOUT
WRITEArquivo

Resumo rápido

ComandoFinalidade
DISPLAYExibir dados
DISPLAY variávelMostrar conteúdo
DISPLAY textoMostrar mensagem
DISPLAY FUNCTIONMostrar função
DISPLAY UPON CONSOLEConsole operador
DISPLAY + ACCEPTEntrada e saída

Conclusão

O comando DISPLAY é a principal instrução de saída do COBOL. Ele permite exibir mensagens, variáveis, resultados de cálculos e informações de processamento, sendo amplamente utilizado para debug, monitoramento e geração de mensagens no SYSOUT de aplicações executadas em mainframes IBM Z.


quinta-feira, 15 de fevereiro de 2007

O que é Compilação e Linkedição de um Programa COBOL?

 

Bellacosa Mainframe o que é Compilação e Linkedição de um programa COBOL

O que é Compilação e Linkedição de um Programa COBOL?

Quando escrevemos um programa COBOL, o computador não executa diretamente o código-fonte.

Antes disso, ele precisa passar por duas etapas fundamentais:

Compilação

e

Linkedição (Link-Edit ou Binder)

Essas etapas transformam o código COBOL em um programa executável pelo z/OS.


Visão Geral

Código COBOL
     ↓
Compilação
     ↓
Objeto (OBJ)
     ↓
Linkedição (Binder)
     ↓
Load Module / Program Object
     ↓
Execução

O que é Compilação?

Compilação é o processo de converter:

Código COBOL

em

Código Objeto

Analogia Simples

Imagine que você escreveu um livro em português.

O compilador é um tradutor que converte o texto para um idioma que o processador entende.


Entrada da Compilação

Programa fonte:

IDENTIFICATION DIVISION.

PROGRAM-ID. HELLO.

PROCEDURE DIVISION.

DISPLAY 'OLA MUNDO'.

STOP RUN.

Saída da Compilação

Arquivo objeto:

OBJETO

Ainda não é executável.


O que o Compilador faz?

Durante a compilação ele:

✅ Analisa sintaxe

✅ Valida comandos COBOL

✅ Expande COPYBOOKs

✅ Verifica variáveis

✅ Gera instruções de máquina

✅ Produz mensagens de erro


Exemplo de erro

DISPLY 'OLA'

Resultado:

IGYPS2121-S

Erro de sintaxe.


Compilador COBOL

Nos ambientes IBM Z normalmente encontramos:

Enterprise COBOL for z/OS

O que é o Código Objeto?

Após a compilação é criado:

OBJETO

Também chamado de:

Object Deck
Object Module
OBJ

Características

  • Não executa sozinho

  • Pode conter referências externas

  • Precisa passar pelo Binder


O que é Linkedição?

Também chamada:

Link-Edit

ou

Binding


Função

Transformar o código objeto em um programa executável.


Fluxo

OBJETO
   ↓
BINDER
   ↓
LOAD MODULE

O que o Binder faz?

Ele:

✅ Resolve chamadas externas

✅ Liga subprogramas

✅ Liga bibliotecas

✅ Resolve referências CICS

✅ Resolve referências DB2

✅ Cria módulo executável


Analogia Simples

Imagine várias peças de LEGO.

A compilação cria as peças.

A linkedição monta tudo em um único brinquedo funcional.


Resultado Final

LOAD MODULE

ou

PROGRAM OBJECT

Onde fica o executável?

Normalmente em uma biblioteca:

USER.LOADLIB

ou

PROD.LOADLIB

Fluxo Completo

COBOL Source
      ↓
Compiler
      ↓
Object Module
      ↓
Binder
      ↓
Load Module
      ↓
JCL EXEC PGM=

Exemplo de Execução

JCL:

//STEP1 EXEC PGM=HELLO

O z/OS procura:

HELLO

na:

STEPLIB
JOBLIB
LINKLIST

O que é STEPLIB?

Biblioteca onde o executável está armazenado.


Exemplo

//STEPLIB DD DSN=USER.LOADLIB,
//            DISP=SHR

Chamadas entre Programas

Programa principal:

CALL 'CALCSAL'

Durante a Linkedição

O Binder procura:

CALCSAL

e conecta os módulos.


Linkedição com CICS

Programas CICS utilizam bibliotecas especiais.

Exemplo:

DFHEIBLK
DFHCOMMAREA

O Binder resolve essas referências.


Linkedição com DB2

Programas DB2 possuem etapas extras.

COBOL
 ↓
Pré-compilador DB2
 ↓
Compilação
 ↓
BIND DB2
 ↓
Linkedição

O que é BIND no DB2?

Não confundir com Binder.


Binder

Cria executável.


BIND DB2

Cria:

PACKAGE
PLAN

Principais Saídas da Compilação


SYSPRINT

Mensagens do compilador.


LISTING

Listagem fonte expandida.


OBJETO

Código objeto.


Principais Saídas da Linkedição


SYSPRINT

Mensagens Binder.


LOAD MODULE

Executável.


Erros Comuns de Compilação

Variável não declarada

IGYPS...

COPYBOOK inexistente

IGYDS...

Erro de sintaxe

IGYPS...

Erros Comuns de Linkedição

Módulo não encontrado

IEW2456E

Referência externa não resolvida

IEW2646S

Biblioteca ausente

IEW...

Ferramentas Envolvidas

EtapaFerramenta
CompilaçãoEnterprise COBOL
LinkediçãoBinder (IEWL)
Execuçãoz/OS Loader

Exemplo Real de JCL

//COBOL EXEC PGM=IGYCRCTL
//SYSIN DD DSN=USER.COBOL(PROG1)

//LKED EXEC PGM=IEWL
//SYSLMOD DD DSN=USER.LOADLIB(PROG1)

Curiosidades

1. Antigamente a saída da compilação era gravada em cartões perfurados

2. O Binder substituiu o antigo Linkage Editor

3. Um único programa pode ser ligado a dezenas de módulos externos

4. Grandes bancos compilam milhares de programas COBOL diariamente


Resumo Rápido

EtapaFunção
CompilaçãoGera código objeto
Código ObjetoSaída intermediária
BinderLiga módulos
LinkediçãoCria executável
Load ModulePrograma executável
STEPLIBBiblioteca de execução
CALLChama subprograma
BIND DB2Cria Package e Plan

Conclusão

A compilação converte o código COBOL em um módulo objeto, enquanto a linkedição (Binder) conecta todas as dependências e gera o módulo executável que será carregado pelo z/OS. Entender essas etapas é fundamental para diagnosticar erros de compilação, problemas de execução e compreender como os programas COBOL realmente funcionam no ambiente IBM Z.


quarta-feira, 7 de fevereiro de 2007

COBOL Controle de Fluxo IF e Carga de Paragrafos PERFORM

 

Bellacosa Mainframe e o if e perform no cobol

COBOL : Controle de Fluxo IF e Carga de Paragrafos PERFORM

Dois dos comandos mais importantes do COBOL são:

IF

e

PERFORM

Praticamente toda lógica COBOL usa esses comandos.

Eles controlam:

  • decisões;

  • execução;

  • loops;

  • fluxo batch;

  • regras de negócio.


O que é IF no COBOL?

O IF é usado para:

tomar decisões.


Analogia simples

Imagine:

SE chover
   pegar guarda-chuva
SENÃO
   sair normalmente

Isso é:

lógica condicional.


Sintaxe básica

IF condição
   instrução
END-IF

Exemplo simples

IF SALDO > 0
   DISPLAY 'SALDO POSITIVO'
END-IF

Como funciona?

O COBOL verifica:

SALDO > 0 ?

Se for verdadeiro:

executa DISPLAY

IF com ELSE

IF SALDO > 0
   DISPLAY 'POSITIVO'
ELSE
   DISPLAY 'NEGATIVO'
END-IF

Fluxo lógico

      CONDIÇÃO
        ↓
   VERDADEIRO?
     /     \
   SIM      NÃO
    ↓        ↓
COMANDO1  COMANDO2

IF com várias condições


AND

IF IDADE > 18
AND SALDO > 1000

OR

IF STATUS = 'A'
OR STATUS = 'P'

NOT

IF NOT ERRO

Comparações usadas no IF

OperadorSignificado
=Igual
>Maior
<Menor
>=Maior igual
<=Menor igual
NOTNegação

Exemplo completo

IF SALDO >= 1000
   DISPLAY 'CLIENTE VIP'
ELSE
   DISPLAY 'CLIENTE NORMAL'
END-IF

IF aninhado

IF dentro de IF.


Exemplo

IF STATUS = 'A'
   IF SALDO > 1000
      DISPLAY 'VIP'
   END-IF
END-IF

Problema comum

IFs excessivos deixam código:

complexo.


O que é PERFORM?

PERFORM é usado para:

executar rotinas ou loops.


Um dos comandos mais importantes do COBOL


Analogia simples

Imagine apertar um botão:

EXECUTAR PROCESSAMENTO

Isso é:

PERFORM.


PERFORM simples

PERFORM CALCULAR

O que acontece?

O COBOL:

  1. vai até o parágrafo;

  2. executa;

  3. retorna.


Exemplo completo

PROCEDURE DIVISION.

MAIN.
    PERFORM CALCULAR
    STOP RUN.

CALCULAR.
    DISPLAY 'PROCESSANDO'.

Fluxo visual

MAIN
 ↓
PERFORM CALCULAR
 ↓
CALCULAR
 ↓
RETORNA MAIN

PERFORM UNTIL

Usado para:

repetição (loop).


Exemplo

PERFORM UNTIL EOF = 'S'

   READ ARQCLIENTE
      AT END
         MOVE 'S' TO EOF
   END-READ

END-PERFORM

O que isso faz?

Repete:

até EOF = 'S'

Muito usado em batch

Principalmente:

  • leitura arquivos;

  • processamento registros;

  • relatórios.


Fluxo PERFORM UNTIL

INICIO LOOP
    ↓
LER REGISTRO
    ↓
EOF?
 /      \
NÃO      SIM
 ↓        ↓
CONTINUA FIM

PERFORM VARYING

Similar ao:

FOR.


Exemplo

PERFORM VARYING WS-I FROM 1 BY 1
UNTIL WS-I > 10

   DISPLAY WS-I

END-PERFORM

Resultado

1
2
3
...
10

Muito usado em tabelas


O que é inline PERFORM?

PERFORM sem parágrafo externo.


Exemplo

PERFORM
   DISPLAY 'TESTE'
END-PERFORM

PERFORM TIMES

Executa quantidade fixa.


Exemplo

PERFORM 5 TIMES
   DISPLAY 'OLA'
END-PERFORM

Resultado

OLA
OLA
OLA
OLA
OLA

IF + PERFORM juntos

Muito comum no COBOL.


Exemplo

IF SALDO > 0
   PERFORM PROCESSAR
ELSE
   PERFORM ERRO
END-IF

Fluxo real batch

LER
 ↓
IF válido
 ↓
PERFORM cálculo
 ↓
WRITE saída

Exemplo batch completo

PERFORM UNTIL EOF = 'S'

   READ CLIENTE
      AT END
         MOVE 'S' TO EOF

      NOT AT END

         IF SALDO > 0
            PERFORM PROCESSA
         ELSE
            PERFORM REJEITA
         END-IF

   END-READ

END-PERFORM

O que é EOF?

End Of File

Fim do arquivo.


Vantagens do IF

  • clareza;

  • decisão;

  • controle lógico.


Vantagens do PERFORM

  • modularização;

  • reutilização;

  • loops organizados;

  • menos GO TO.


COBOL moderno usa muito:

  • IF;

  • END-IF;

  • PERFORM;

  • EVALUATE.


O que o PERFORM substituiu?

Em muitos casos:

GO TO.


Isso ajudou a reduzir:

spaghetti code.


Curiosidades incríveis

1. Grande parte do processamento bancário usa PERFORM UNTIL


2. IF é uma das instruções mais usadas do COBOL


3. Sistemas batch podem executar bilhões de loops PERFORM diariamente


4. O COBOL estruturado reduziu muito uso de GO TO


Erros comuns de iniciantes


1. Esquecer END-IF


2. Criar loops infinitos


3. Misturar muitos IFs aninhados


4. Não controlar EOF corretamente


Dicas importantes

Use END-IF sempre


Prefira PERFORM ao GO TO


Modularize lógica em parágrafos


Controle loops cuidadosamente


Como isso aparece no dia a dia?

Praticamente em:

  • batch;

  • bancos;

  • cartões;

  • DB2;

  • CICS;

  • processamento financeiro.


Resumo rápido

ComandoFunção
IFDecisão
ELSECaminho alternativo
PERFORMExecuta rotina
PERFORM UNTILLoop
PERFORM VARYINGRepetição contador
END-IFFinal IF
EOFFim arquivo

Conclusão

IF e PERFORM são duas das estruturas mais importantes do COBOL.

Elas controlam decisões, execução de rotinas e loops, sendo fundamentais para programas batch e online no ambiente mainframe IBM Z.


segunda-feira, 5 de fevereiro de 2007

Estrutura de um Programa COBOL

 

Bellacosa Mainframe e o esqueleto de um programa COBOL conheça sua estrutura

Estrutura de um Programa COBOL

O COBOL foi criado para desenvolver:

  • sistemas corporativos;

  • processamento batch;

  • aplicações financeiras;

  • sistemas bancários;

  • processamento online.

Uma das maiores características do COBOL é sua:

organização estrutural.

Os programas são divididos em:

  • DIVISIONs;

  • SECTIONs;

  • PARAGRAPHs;

  • STATEMENTs.

Isso torna o COBOL:

  • legível;

  • modular;

  • organizado;

  • ideal para sistemas gigantes no mainframe IBM Z.


Estrutura clássica de um programa COBOL

IDENTIFICATION DIVISION.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.

Fluxo lógico

DIVISION
   ↓
SECTION
   ↓
PARAGRAPH
   ↓
STATEMENTS

1. IDENTIFICATION DIVISION

Responsável pela:

identificação do programa.


Contém:

  • nome;

  • autor;

  • comentários;

  • versão.


Exemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. CLIENTE.
AUTHOR. BELLACOSA.

2. ENVIRONMENT DIVISION

Define:

ambiente de execução.


Contém:

  • arquivos;

  • devices;

  • datasets;

  • configurações.


SECTIONs principais

CONFIGURATION SECTION
INPUT-OUTPUT SECTION

Exemplo

SELECT ARQCLI
ASSIGN TO CLIENTE.

3. DATA DIVISION

Define:

dados e variáveis.


SECTIONs mais usadas


FILE SECTION

Layouts de arquivos.


WORKING-STORAGE SECTION

Variáveis internas.


LINKAGE SECTION

Parâmetros recebidos.


LOCAL-STORAGE SECTION

Variáveis locais temporárias.


Exemplo

01 WS-NOME PIC X(30).
01 WS-SALDO PIC 9(9)V99.

4. PROCEDURE DIVISION

Contém:

toda lógica do programa.


Aqui ficam:

  • IF;

  • PERFORM;

  • READ;

  • WRITE;

  • COMPUTE;

  • loops;

  • regras negócio.


Exemplo

PROCEDURE DIVISION.

MAIN.
   DISPLAY 'OLA'.
   STOP RUN.

O que são SECTIONs?

SECTIONs são:

subdivisões dentro das DIVISIONs.


Exemplo

WORKING-STORAGE SECTION.

O que são PARAGRAPHs?

Blocos menores de lógica.


Exemplo

CALCULAR-JUROS.

O que são STATEMENTs?

São:

comandos COBOL executáveis.


Exemplos

MOVE
DISPLAY
IF
PERFORM
READ
WRITE
COMPUTE

Principais comandos COBOL


MOVE

Movimenta dados.

MOVE 100 TO WS-VALOR

DISPLAY

Mostra mensagens.

DISPLAY 'PROCESSANDO'

IF

Decisão lógica.

IF SALDO > 0

EVALUATE

Similar ao CASE.


PERFORM

Executa rotina/repetição.

PERFORM CALCULAR

READ

Lê arquivos.


WRITE

Grava registros.


REWRITE

Atualiza registro VSAM.


DELETE

Remove registro.


COMPUTE

Realiza cálculos.


CALL

Chama subprograma.


STOP RUN

Finaliza programa.


Tipos de programas COBOL


1. Programa Batch

Executado via:

  • JCL;

  • JES2;

  • scheduler.


Características

  • processamento lote;

  • arquivos;

  • relatórios;

  • milhões registros.


Fluxo típico

LER
 ↓
VALIDAR
 ↓
PROCESSAR
 ↓
GERAR RELATÓRIO

Exemplo JCL

//STEP1 EXEC PGM=COBPGM

2. Programa Online

Executado interativamente.

Muito usado em:

CICS.


Exemplos

  • caixa eletrônico;

  • consulta saldo;

  • PIX;

  • cartão.


Características

  • resposta rápida;

  • transacional;

  • online;

  • interação usuário.


Exemplo CICS

EXEC CICS SEND

3. Programa Aninhado (Nested Program)

Programa dentro de outro programa.


Exemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. PAI.

IDENTIFICATION DIVISION.
PROGRAM-ID. FILHO.

Vantagens

  • encapsulamento;

  • compartilhamento variáveis.


Muito usado em COBOL moderno


4. Programa Recursivo

Programa que:

chama a si mesmo.


Exemplo

CALL 'PROG1'

dentro do próprio:

PROG1

Necessita:

RECURSIVE

Muito menos comum no COBOL tradicional


Exemplo

PROGRAM-ID. FAT RECURSIVE.

5. Subprograma

Programa chamado por outro programa.


Exemplo

CALL 'CALCSAL'

Muito comum em:

  • modularização;

  • regras compartilhadas.


6. Programa Conversacional

Muito usado em CICS.

Mantém “estado” entre telas.


O que é modularização?

Dividir sistema em:

  • pequenos programas;

  • rotinas;

  • serviços.


Benefícios

  • manutenção;

  • reutilização;

  • organização.


O que é copybook?

Arquivo reutilizável.


Exemplo

COPY CLIENTE.

Muito usado para layouts


O que é PIC?

Define formato campo.


Exemplos

PIC X(20)

Texto.


PIC 9(5)

Número.


O que é COMP-3?

Formato numérico compactado.

Muito usado em:

processamento financeiro.


O que é EOF?

End Of-File

Fim do arquivo.


Exemplo loop batch

PERFORM UNTIL EOF='S'

Como COBOL aparece no dia a dia?

Praticamente em:

  • bancos;

  • PIX;

  • cartões;

  • folha salarial;

  • seguros;

  • faturamento.


Curiosidades incríveis

1. Muitos programas COBOL possuem milhões de linhas


2. Sistemas COBOL podem funcionar décadas sem parar


3. COBOL moderno suporta APIs e cloud


4. Mainframes executam bilhões de transações COBOL diariamente


Erros comuns de iniciantes


1. Misturar lógica e variáveis


2. Criar PROCEDURE DIVISION gigantes


3. Não modularizar


4. Usar GO TO excessivamente


Resumo rápido

EstruturaFunção
DIVISIONGrande bloco
SECTIONSubdivisão
PARAGRAPHBloco lógico
STATEMENTComando
BatchProcessamento lote
OnlineProcessamento interativo
RecursiveChama si mesmo
NestedPrograma aninhado

Conclusão

A estrutura do COBOL foi criada para suportar sistemas corporativos enormes com organização, estabilidade e clareza.

DIVISIONs, SECTIONs, PARAGRAPHs e STATEMENTs permitem criar programas batch e online altamente confiáveis, fundamentais para o ambiente mainframe IBM Z.

domingo, 4 de fevereiro de 2007

O que são as DIVISIONS e SECTIONs do COBOL?

 

Bellacosa o que as divisions e section num programa COBOL

O que são as DIVISIONS e SECTIONs do COBOL?

Uma das primeiras coisas que chama atenção em COBOL é sua estrutura extremamente organizada.

Diferente de muitas linguagens modernas, o COBOL divide o programa em:

  • DIVISIONs;

  • SECTIONs;

  • PARAGRAPHs.

Isso ajuda a criar programas:

  • organizados;

  • legíveis;

  • fáceis de manter.

Especialmente em sistemas corporativos gigantes do:

mainframe IBM Z.


O que são DIVISIONs?

DIVISIONs são:

grandes blocos principais do programa COBOL.

Cada DIVISION possui:

uma responsabilidade específica.


Estrutura clássica COBOL

IDENTIFICATION DIVISION
ENVIRONMENT DIVISION
DATA DIVISION
PROCEDURE DIVISION

Analogia simples

Imagine um prédio corporativo.

Cada andar possui uma função:

  • administração;

  • arquivos;

  • dados;

  • operações.

As DIVISIONs funcionam exatamente assim.


Fluxo lógico do COBOL

IDENTIFICATION
      ↓
ENVIRONMENT
      ↓
DATA
      ↓
PROCEDURE

1. IDENTIFICATION DIVISION

Responsável pela:

identificação do programa.


Contém informações como:

  • nome do programa;

  • autor;

  • comentários;

  • data.


Exemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. CLIENTE.
AUTHOR. BELLACOSA.

O item mais importante

PROGRAM-ID

Define:

nome do programa COBOL.


2. ENVIRONMENT DIVISION

Define:

ambiente do programa.


Responsável por:

  • arquivos;

  • dispositivos;

  • configurações;

  • datasets.


Muito usada em batch


SECTIONs principais

CONFIGURATION SECTION
INPUT-OUTPUT SECTION

CONFIGURATION SECTION

Define:

  • máquina;

  • compilador;

  • ambiente.


Exemplo

CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-Z.
OBJECT-COMPUTER. IBM-Z.

INPUT-OUTPUT SECTION

Define:

arquivos do programa.


Exemplo

SELECT CLIENTE
ASSIGN TO ARQCLI.

3. DATA DIVISION

Uma das partes mais importantes.

Responsável pelos:

dados e variáveis.


Aqui ficam:

  • layouts;

  • variáveis;

  • tabelas;

  • áreas de memória;

  • copybooks.


SECTIONs mais famosas


FILE SECTION

Layouts de arquivos.


WORKING-STORAGE SECTION

Variáveis internas.


LINKAGE SECTION

Parâmetros recebidos.


Exemplo FILE SECTION

FD ARQCLIENTE.

01 REG-CLIENTE.
   05 NOME PIC X(30).
   05 SALDO PIC 9(9)V99.

O que é FD?

File Description

Define estrutura do arquivo.


Exemplo WORKING-STORAGE

01 WS-TOTAL PIC 9(9)V99.

O prefixo WS significa:

Working Storage.


Exemplo LINKAGE SECTION

01 LK-CLIENTE PIC X(10).

Muito usada em:

  • CALL;

  • subprogramas;

  • CICS.


O que é PIC?

Define formato do campo.


Exemplos

PIC X(20)

Texto.


PIC 9(5)

Número.


4. PROCEDURE DIVISION

Aqui fica:

a lógica do programa.


É o “cérebro” do COBOL.


Contém:

  • IF;

  • PERFORM;

  • READ;

  • WRITE;

  • COMPUTE;

  • loops;

  • processamento.


Exemplo

PROCEDURE DIVISION.

MAIN.
   DISPLAY 'OLA'.
   STOP RUN.

O que são SECTIONs?

SECTIONs são:

subdivisões dentro das DIVISIONs.


Elas organizam ainda mais o programa.


Exemplo

WORKING-STORAGE SECTION.

O que são PARAGRAPHs?

Pequenos blocos de lógica.


Exemplo

CALCULAR-TOTAL.

Hierarquia do COBOL

DIVISION
   ↓
SECTION
   ↓
PARAGRAPH
   ↓
STATEMENTS

Exemplo completo simplificado

IDENTIFICATION DIVISION.
PROGRAM-ID. TESTE.

DATA DIVISION.

WORKING-STORAGE SECTION.
01 WS-NOME PIC X(20).

PROCEDURE DIVISION.

MAIN.
   MOVE 'VAGNER' TO WS-NOME
   DISPLAY WS-NOME
   STOP RUN.

Como isso aparece no batch?

Muito comum:

READ ARQUIVO
 ↓
VALIDAR
 ↓
PROCESSAR
 ↓
WRITE RELATORIO

Tudo dentro da:

PROCEDURE DIVISION.


Como as DIVISIONs ajudam?

Elas tornam o código:

  • organizado;

  • modular;

  • legível;

  • padronizado.


Por que COBOL é tão organizado?

Porque foi criado para:

sistemas corporativos gigantes.


Grandes programas COBOL possuem:

  • milhares de linhas;

  • dezenas de SECTIONs;

  • centenas de PARAGRAPHs.


Curiosidades incríveis

1. O COBOL foi uma das primeiras linguagens extremamente organizadas


2. Muitas linguagens modernas herdaram ideias de modularização do COBOL


3. Sistemas bancários enormes dependem dessa organização


4. Grandes programas COBOL podem ter centenas de SECTIONs


Erros comuns de iniciantes


1. Misturar lógica na DATA DIVISION


2. Criar PROCEDURE DIVISION gigantesca


3. Não modularizar PARAGRAPHs


4. Confundir FILE SECTION com WORKING-STORAGE


Dicas importantes

Organize variáveis claramente


Separe lógica em PARAGRAPHs pequenos


Nomeie SECTIONs corretamente


Mantenha PROCEDURE DIVISION organizada


Como isso aparece no dia a dia?

Praticamente em:

  • COBOL batch;

  • CICS;

  • DB2;

  • sistemas bancários;

  • processamento financeiro.


Resumo rápido

EstruturaFunção
IDENTIFICATION DIVISIONIdentificação
ENVIRONMENT DIVISIONAmbiente/arquivos
DATA DIVISIONVariáveis/layouts
PROCEDURE DIVISIONLógica
SECTIONSubdivisão
PARAGRAPHBloco lógico

Conclusão

As DIVISIONs e SECTIONs são a base estrutural do COBOL.

Elas organizam programas em áreas específicas de identificação, ambiente, dados e lógica, permitindo criar sistemas corporativos extremamente organizados e confiáveis no ambiente mainframe IBM Z.


sábado, 3 de fevereiro de 2007

O que é COBOL?

 

Bellacosa Mainframe apresenta a linguagem de programação COBOL

O que é COBOL?

Quando falamos de:

  • bancos;

  • cartões;

  • folha salarial;

  • seguros;

  • governos;

  • processamento financeiro;

existe uma linguagem que continua sendo uma das mais importantes do mundo:

COBOL.

Mesmo após décadas, ela ainda movimenta:

  • trilhões de dólares;

  • sistemas bancários;

  • pagamentos;

  • processamento batch;

  • grandes empresas globais.


O que significa COBOL?

COBOL significa:

Common Business Oriented Language

Em português:

Linguagem Orientada a Negócios.


Objetivo do COBOL

O COBOL foi criado para:

processamento de negócios corporativos.

Principalmente:

  • registros;

  • arquivos;

  • relatórios;

  • cálculos financeiros;

  • processamento batch.


Origem histórica

COBOL surgiu em:

1959.

Foi criado por um comitê apoiado pelo governo americano e empresas de tecnologia.


Grace Hopper

Uma das figuras históricas mais importantes relacionadas ao COBOL.

Ela ajudou a popularizar:

  • compiladores;

  • linguagens de alto nível;

  • computação corporativa.


Por que COBOL ficou tão famoso?

Porque ele era:

  • legível;

  • organizado;

  • próximo da linguagem humana;

  • excelente para negócios.


Exemplo COBOL

IF SALDO > 0
   DISPLAY 'SALDO POSITIVO'
END-IF

Muito fácil de entender.


O COBOL foi criado para:

  • bancos;

  • contabilidade;

  • folha salarial;

  • faturamento;

  • seguros;

  • processamento financeiro.


Como COBOL funciona no mainframe?

Principalmente em:

processamento batch.


Fluxo clássico COBOL

LER ARQUIVO
 ↓
VALIDAR
 ↓
CALCULAR
 ↓
ATUALIZAR
 ↓
GERAR RELATÓRIO

O COBOL é procedural?

Tradicionalmente:

sim.

Baseado em:

  • procedimentos;

  • fluxo sequencial;

  • processamento estruturado.


Estrutura clássica de um programa COBOL


IDENTIFICATION DIVISION

Informações do programa.


ENVIRONMENT DIVISION

Ambiente e arquivos.


DATA DIVISION

Variáveis e layouts.


PROCEDURE DIVISION

Lógica do programa.


Exemplo simples

IDENTIFICATION DIVISION.
PROGRAM-ID. TESTE.

PROCEDURE DIVISION.
    DISPLAY 'OLA MUNDO'.
    STOP RUN.

O que é DISPLAY?

Comando usado para:

mostrar mensagens.


O que é MOVE?

Mover valores.


Exemplo

MOVE 100 TO SALDO

O que é PERFORM?

Executar rotinas.


Exemplo

PERFORM CALCULAR

O que é READ?

Ler arquivos.


O que é WRITE?

Gravar registros.


O que é COMPUTE?

Realizar cálculos.


COBOL trabalha muito com arquivos

Principalmente:

  • QSAM;

  • VSAM;

  • datasets sequenciais.


COBOL e DB2

Muito usados juntos.


Exemplo SQL em COBOL

EXEC SQL
   SELECT NOME
   INTO :WS-NOME
   FROM CLIENTES
END-EXEC

COBOL e CICS

Usado para aplicações online.

Exemplo:

  • caixas eletrônicos;

  • consultas bancárias;

  • sistemas transacionais.


COBOL batch

Executado via:

  • JCL;

  • JES2;

  • scheduler.


Exemplo batch

//STEP1 EXEC PGM=COBPGM

O que é compilação COBOL?

Transformar código-fonte em:

executável.


Fluxo simplificado

COBOL SOURCE
   ↓
COMPILADOR
   ↓
LOAD MODULE
   ↓
EXECUÇÃO

O que é copybook?

Arquivo reutilizável com layouts.


Exemplo

01 CLIENTE.
   05 NOME PIC X(30).
   05 SALDO PIC 9(9)V99.

O que é PIC?

Define formato do campo.


Exemplo

PIC X(10)

Texto.


PIC 9(5)

Numérico.


O que é COMP-3?

Formato compactado numérico.

Muito usado em:

processamento financeiro.


O COBOL ainda é usado?

Muito.

Especialmente em:

  • bancos;

  • seguradoras;

  • governos;

  • cartões;

  • sistemas críticos.


Por que COBOL ainda existe?

Porque ele é:

  • extremamente confiável;

  • estável;

  • rápido;

  • eficiente para batch.


Quantidade de código COBOL no mundo

Estima-se:

bilhões de linhas.


COBOL moderno

Hoje existe:

  • COBOL orientado a objetos;

  • APIs REST;

  • integração cloud;

  • DevOps;

  • OpenShift;

  • z/OS Connect.


COBOL não é “morto”

Na verdade:

continua extremamente relevante.


Vantagens do COBOL


Excelente para negócios


Muito estável


Ótimo para batch


Fácil leitura


Alta confiabilidade


Excelente performance em mainframe


Desvantagens


Sintaxe extensa


Curva inicial diferente


Menos popular fora do corporativo


Sistemas antigos podem ser complexos


Curiosidades incríveis

1. Grande parte das transações bancárias do mundo passa por COBOL


2. Muitos sistemas COBOL possuem mais de 40 anos


3. O COBOL sobreviveu a diversas gerações tecnológicas


4. Mainframes executam bilhões de linhas COBOL diariamente


Erros comuns de iniciantes


1. Achar que COBOL morreu


2. Confundir COBOL com linguagem “lenta”


3. Ignorar batch e arquivos


4. Não entender lógica procedural


Como COBOL aparece no dia a dia?

Praticamente em:

  • PIX;

  • cartões;

  • bancos;

  • folha salarial;

  • faturamento;

  • seguros;

  • governo.


Exemplo simplificado real

LER CLIENTE
 ↓
VALIDAR CPF
 ↓
CALCULAR LIMITE
 ↓
ATUALIZAR DB2
 ↓
GERAR RELATÓRIO

Resumo rápido

ConceitoSignificado
COBOLLinguagem de negócios
BatchProcessamento em lote
CICSProcessamento online
DB2Banco de dados
JCLExecução batch
COPYBOOKLayout reutilizável
COMP-3Formato numérico

Conclusão

COBOL é uma das linguagens mais importantes da história da computação corporativa.

Criado para processamento de negócios, ele continua sendo fundamental no ambiente mainframe IBM Z, executando sistemas críticos de bancos, governos e grandes empresas em todo o mundo.


sexta-feira, 2 de fevereiro de 2007

O que é Paradigma de Programação Procedural Estruturado?

 

Bellacosa Mainframe e o paradigma de programacao procedural estruturado

O que é Paradigma de Programação Procedural Estruturado?

Quando estudamos:

  • COBOL;

  • C;

  • PL/I;

  • programação batch;

  • desenvolvimento no mainframe;

um conceito muito importante aparece:

programação procedural estruturada.

Ela foi uma enorme evolução na história da computação corporativa.


Primeiro: o que significa “procedural”?

Programação procedural é:

organizar programas em procedimentos e rotinas.

Exemplo:

VALIDAR
CALCULAR
GERAR-RELATORIO

Cada parte executa:

uma tarefa específica.


Então o que significa “estruturada”?

Estruturada significa:

organizar o código de forma clara, previsível e controlada.

Ela evita:

  • confusão;

  • desvios excessivos;

  • código caótico;

  • spaghetti code.


Definição simples

Programação procedural estruturada é:

um paradigma procedural que usa estruturas organizadas de fluxo e modularização.

Ela busca:

  • clareza;

  • manutenção;

  • organização;

  • legibilidade.


Analogia simples

Imagine uma cidade.


Código não estruturado

Ruas sem organização.
Tudo confuso.


Código estruturado

Cidade organizada:

  • avenidas;

  • sinais;

  • setores;

  • fluxo lógico.


Origem histórica

Nos primeiros sistemas:

  • Assembly;

  • COBOL antigo;

  • FORTRAN antigo;

era comum usar muitos:

GO TO

Isso criava programas extremamente difíceis de manter.


Então surgiu a programação estruturada

Com conceitos como:

  • blocos;

  • procedimentos;

  • loops;

  • IF;

  • modularização.


Objetivo principal

Eliminar:

spaghetti code.


O que é spaghetti code?

Código cheio de:

  • desvios;

  • GO TO;

  • saltos;

  • fluxo confuso.

Parecendo:

um prato de espaguete.


Exemplo não estruturado

GO TO A100
GO TO B200
GO TO C300

Fluxo difícil de entender.


Exemplo estruturado

IF SALDO > 0
   PERFORM PROCESSA
ELSE
   PERFORM ERRO
END-IF

Muito mais organizado.


Estruturas fundamentais da programação estruturada


Sequência

Execução linear.


Decisão

Escolha de caminhos.


Repetição

Loops controlados.


Fluxo estruturado clássico

INICIO
 ↓
LER DADOS
 ↓
VALIDAR
 ↓
PROCESSAR
 ↓
GERAR SAÍDA
 ↓
FIM

Como isso aparece no COBOL?

Muito fortemente.


Exemplo COBOL estruturado

PERFORM UNTIL EOF = 'S'

   READ CLIENTE
      AT END
         MOVE 'S' TO EOF
      NOT AT END
         PERFORM PROCESSA-CLIENTE
   END-READ

END-PERFORM

Isso é estruturado porque:

  • possui fluxo claro;

  • evita GO TO;

  • usa blocos organizados.


O que é modularização?

Dividir programa em partes menores.


Exemplo

VALIDAR-CLIENTE
CALCULAR-JUROS
GERAR-RELATORIO

Benefícios

  • manutenção;

  • reutilização;

  • clareza;

  • testes mais fáceis.


O que é bloco estruturado?

Código delimitado logicamente.


Exemplos COBOL

IF / END-IF
EVALUATE
PERFORM UNTIL

Antes da programação estruturada

Muito código tinha:

GO TO

em excesso.


Problema disso

Fluxo imprevisível.


Programação estruturada ajudou a:

  • reduzir bugs;

  • melhorar manutenção;

  • aumentar confiabilidade.


O COBOL moderno é estruturado?

Sim.

Principalmente usando:

  • END-IF;

  • EVALUATE;

  • PERFORM;

  • inline PERFORM.


Exemplo batch estruturado

LER ARQUIVO
 ↓
VALIDAR
 ↓
CALCULAR
 ↓
ATUALIZAR DB2
 ↓
GERAR RELATÓRIO

Como isso ajuda no mainframe?

Mainframes processam:

  • milhões;

  • bilhões de registros.

Precisam de:

  • estabilidade;

  • clareza;

  • manutenção segura.


Programação estruturada trouxe exatamente isso


Características da programação procedural estruturada


Fluxo previsível


Menos GO TO


Uso de procedimentos


Modularização


Blocos organizados


Facilidade manutenção


Legibilidade


Vantagens


Código mais limpo


Mais fácil de entender


Menos erros


Melhor debugging


Excelente para batch


Muito usada em COBOL


Desvantagens


Sistemas gigantes ainda podem ficar complexos


Exige disciplina de programação


Modularização ruim pode dificultar manutenção


Procedural estruturado vs procedural antigo


Antigo

Muito:

GO TO

Estruturado

Mais:

IF
PERFORM
EVALUATE

Procedural estruturado vs orientação a objetos


Estruturado

Organiza:

procedimentos.


OO

Organiza:

objetos/classes.


Curiosidades incríveis

1. A programação estruturada revolucionou o desenvolvimento corporativo


2. Grande parte do COBOL moderno segue princípios estruturados


3. Muitos sistemas bancários antigos passaram por “reestruturação” para remover GO TO


4. Estruturação ajudou muito na manutenção de sistemas gigantes


Erros comuns de iniciantes


1. Usar GO TO demais


2. Criar procedimentos enormes


3. Misturar lógica demais


4. Não modularizar


Dicas importantes

Use:

  • PERFORM;

  • IF;

  • EVALUATE.


Evite GO TO excessivo


Divida lógica em pequenas rotinas


Organize fluxo claramente


Como isso aparece no dia a dia?

Praticamente em:

  • COBOL;

  • batch;

  • DB2 procedural;

  • faturamento;

  • bancos;

  • folha salarial.


Exemplo simplificado completo

MAIN
 ↓
LER CLIENTES
 ↓
VALIDAR
 ↓
CALCULAR
 ↓
ATUALIZAR DB2
 ↓
GERAR RELATÓRIO
 ↓
FIM

Resumo rápido

ConceitoSignificado
ProceduralBaseado em procedimentos
EstruturadoFluxo organizado
ModularizaçãoDividir programa
PERFORMExecuta rotina
IFDecisão
GO TODesvio fluxo
Spaghetti CodeCódigo confuso

Conclusão

O paradigma de programação procedural estruturado organiza programas em procedimentos claros e fluxos previsíveis, reduzindo complexidade e facilitando manutenção.

Ele é a base do COBOL moderno e do processamento batch corporativo no ambiente mainframe IBM Z.