📘 TUTORIAL COMPLETO DE COBOL

 


📘 TUTORIAL COMPLETO DE COBOL

(Do básico ao profissional)


🧠 O que é COBOL?

COBOL (Common Business-Oriented Language) é uma linguagem criada para processamento de dados comerciais, usada até hoje em:

  • Bancos

  • Seguradoras

  • Governo

  • Mainframes (IBM z/OS)

💡 Mais de 70% das transações bancárias mundiais ainda passam por COBOL.


🏗️ Onde o COBOL roda?

  • Mainframe IBM (z/OS)

  • Linux / Windows (OpenCOBOL / GnuCOBOL)

  • Integração com C, Java, APIs e Banco de Dados


🧩 Estrutura de um programa COBOL

Todo programa COBOL é dividido em DIVISIONS:

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.

DATA DIVISION.

PROCEDURE DIVISION.
    DISPLAY "Olá, mundo COBOL!".
    STOP RUN.

🔹 Divisions principais

  1. IDENTIFICATION → nome do programa

  2. ENVIRONMENT → arquivos, dispositivos

  3. DATA → variáveis e estruturas

  4. PROCEDURE → lógica do programa


🧮 Tipos de dados em COBOL

01 NOME          PIC X(30).
01 IDADE         PIC 9(03).
01 SALARIO       PIC 9(07)V99.
01 ATIVO         PIC X VALUE 'S'.

📌 Explicação

  • X → texto

  • 9 → número

  • V → vírgula implícita

  • PIC → picture (formato do dado)


📂 Estruturas (níveis)

01 CLIENTE.
   05 ID-CLIENTE    PIC 9(05).
   05 NOME          PIC X(40).
   05 EMAIL         PIC X(50).

✔ Muito usado para banco e arquivos


🔁 Estruturas de controle

IF / ELSE

IF IDADE >= 18
   DISPLAY "Maior de idade"
ELSE
   DISPLAY "Menor de idade"
END-IF.

PERFORM (loop)

PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
   DISPLAY I
END-PERFORM.

📁 Manipulação de arquivos

COBOL é fortíssimo em arquivos sequenciais.

Definição

SELECT ARQ-CLIENTE ASSIGN TO "clientes.dat"
   ORGANIZATION IS LINE SEQUENTIAL.

Leitura

READ ARQ-CLIENTE
   AT END DISPLAY "Fim do arquivo"
END-READ.

🗄️ COBOL com Banco de Dados (SQL)

Usa SQL embutido (Embedded SQL)

Exemplo (DB2 / Oracle)

EXEC SQL
   SELECT NOME, SALARIO
   INTO :NOME, :SALARIO
   FROM CLIENTES
   WHERE ID = :ID-CLIENTE
END-EXEC.

🔹 : indica variável COBOL
🔹 Muito usado em bancos


📑 COPYBOOK (fundamental)

Arquivo reutilizável de estruturas de dados.

01 CLIENTE.
   05 ID PIC 9(05).
   05 NOME PIC X(40).

Usando:

COPY CLIENTE.

✔ Mantém padrão entre sistemas
✔ Integra COBOL com outras linguagens


🔗 Integração com sistemas modernos

COBOL + Java

  • Via arquivos

  • Via banco

  • Via chamadas C

COBOL + APIs

  • REST via middleware

  • Mainframe ↔ Microserviços

COBOL + Python

  • Python processa dados

  • COBOL mantém core bancário


⚙️ Compiladores COBOL

Mainframe

  • IBM Enterprise COBOL

Windows / Linux

  • GnuCOBOL (Open Source)

cobc -x programa.cob

🧪 Debug e testes

  • DISPLAY para debug

  • Logs em arquivo

  • Testes batch


🏢 Padrões corporativos

✔ Programas pequenos e bem definidos
✔ Uso intenso de COPYBOOK
✔ Banco como contrato
✔ Mudanças controladas


❌ Erros comuns

❌ Alterar copybook sem impacto
❌ Lógica misturada com SQL
❌ Falta de versionamento
❌ Ignorar tratamento de erro SQLCODE


🚀 Caminho profissional (passo a passo)

1️⃣ Aprender sintaxe básica
2️⃣ Trabalhar com arquivos
3️⃣ SQL embutido
4️⃣ COPYBOOKs
5️⃣ Integração com banco
6️⃣ Sistemas legados
7️⃣ Integração moderna (APIs)


💼 Mercado de trabalho

  • Poucos profissionais

  • Alta demanda

  • Salários altos

  • Sistemas críticos

💰 COBOL = legado que paga bem



No COBOL, as "fórmulas" não são escritas apenas com símbolos matemáticos como em outras linguagens. Elas seguem uma sintaxe chamada Verbos Aritméticos, desenhada para que um gerente de banco em 1960 conseguisse ler o código e entender a regra de negócio.

Aqui estão as principais formas de realizar cálculos:


1. Verbos Aritméticos Básicos

Estes são os comandos diretos para operações simples.

OperaçãoComando COBOLEquivalente (Python/C#)
SomaADD A TO B GIVING C.c = a + b
SubtraçãoSUBTRACT A FROM B GIVING C.c = b - a
MultiplicaçãoMULTIPLY A BY B GIVING C.c = a * b
DivisãoDIVIDE A BY B GIVING C.c = a / b
RestoDIVIDE A BY B GIVING C REMAINDER R.c = a // b; r = a % b

Nota: Se você não usar o GIVING C, o COBOL atualizará o valor diretamente na segunda variável. Por exemplo: ADD 10 TO SALARIO aumenta o salário em 10.


2. O Verbo COMPUTE (Para Fórmulas Complexas)

Quando a conta é grande (como a nossa Hipotenusa), usar os verbos acima fica confuso. Para isso, o COBOL tem o COMPUTE, que aceita operadores matemáticos comuns:

  • + (Soma)

  • - (Subtração)

  • * (Multiplicação)

  • / (Divisão)

  • ** (Potência)

Exemplo da Hipotenusa em COBOL:

COBOL
COMPUTE HIPOTENUSA = (CATETO-A ** 2 + CATETO-B ** 2) ** 0.5.

3. Arredondamento e Erros (ROUNDED e SIZE ERROR)

No setor financeiro, a precisão é tudo. O COBOL tem cláusulas nativas para isso que são muito poderosas:

  • ROUNDED: Se o resultado for 10.556 e sua variável só aceita 2 casas, o COBOL arredonda para 10.56 automaticamente.

  • ON SIZE ERROR: Um "seguro" caso o número seja maior do que a variável aguenta (overflow).

Exemplo Prático:

COBOL
MULTIPLY VALOR-BRUTO BY IMPOSTO 
    GIVING VALOR-LIQUIDO ROUNDED
    ON SIZE ERROR
        DISPLAY "ERRO: VALOR MUITO GRANDE PARA O CAMPO!".

4. Funções Intrínsecas (FUNCTION)

Versões modernas do COBOL (COBOL-85 em diante) possuem funções prontas para estatística e matemática avançada:

  • FUNCTION SQRT(A): Raiz quadrada.

  • FUNCTION MEAN(A B C): Média aritmética.

  • FUNCTION MAX(A B C): Retorna o maior valor.

  • FUNCTION CURRENT-DATE: Pega a data e hora do sistema.


Exemplo de uma "Fórmula Financeira" Completa

Se fôssemos calcular um juro simples:

COBOL
* JUROS = CAPITAL * TAXA * TEMPO
COMPUTE VALOR-JUROS = CAPITAL * (TAXA / 100) * TEMPO.
ADD VALOR-JUROS TO CAPITAL GIVING TOTAL-DEVIDO.

Veja um exemplo de fórmulas para calcular algo específico, como um holerite ou média de notas:

 

Vamos criar um programa em COBOL que simula um Processamento de Folha de Pagamento (Holerite). Este exemplo é perfeito porque utiliza ADD, SUBTRACT, COMPUTE e as regras de formatação de casas decimais.

Programa: Calculadora de Salário Líquido

Este código calcula o salário bruto, desconta o INSS (fixo em 11% para o exemplo) e exibe o resultado final.

COBOL
       IDENTIFICATION DIVISION.
       PROGRAM-ID. CALC-HOLERITE.
       AUTHOR. GEMINI-AI.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       * Variaveis de entrada (PIC 9 significa numero)
       01 NOME-FUNC        PIC X(30).
       01 SALARIO-HORA     PIC 9(04)V99.
       01 HORAS-TRAB       PIC 9(03).
       
       * Variaveis de calculo
       01 SALARIO-BRUTO    PIC 9(06)V99.
       01 VALOR-INSS       PIC 9(05)V99.
       01 SALARIO-LIQUIDO  PIC 9(06)V99.
       
       * Variavel de edicao (Z oculta zeros a esquerda e virgula)
       01 MASK-SALARIO     PIC ZZZ.ZZ9,99.

       PROCEDURE DIVISION.
       001-INICIO.
           DISPLAY "--- SISTEMA DE FOLHA DE PAGAMENTO ---".
           
           DISPLAY "NOME DO FUNCIONARIO: " WITH NO ADVANCING.
           ACCEPT NOME-FUNC.
           
           DISPLAY "VALOR DA HORA: " WITH NO ADVANCING.
           ACCEPT SALARIO-HORA.
           
           DISPLAY "HORAS TRABALHADAS: " WITH NO ADVANCING.
           ACCEPT HORAS-TRAB.

           * USANDO COMPUTE PARA CALCULO MULTIPLO
           COMPUTE SALARIO-BRUTO = SALARIO-HORA * HORAS-TRAB.
           
           * USANDO MULTIPLY PARA DESCONTO
           MULTIPLY SALARIO-BRUTO BY 0.11 GIVING VALOR-INSS ROUNDED.
           
           * USANDO SUBTRACT PARA LIQUIDO
           SUBTRACT VALOR-INSS FROM SALARIO-BRUTO GIVING SALARIO-LIQUIDO.

           * EXIBICAO DOS RESULTADOS
           DISPLAY "-------------------------------------".
           DISPLAY "CONTRA-CHEQUE DE: " NOME-FUNC.
           
           MOVE SALARIO-BRUTO TO MASK-SALARIO.
           DISPLAY "SALARIO BRUTO:  R$ " MASK-SALARIO.
           
           MOVE VALOR-INSS TO MASK-SALARIO.
           DISPLAY "DESCONTO INSS:  R$ " MASK-SALARIO.
           
           MOVE SALARIO-LIQUIDO TO MASK-SALARIO.
           DISPLAY "SALARIO LIQUIDO: R$ " MASK-SALARIO.
           DISPLAY "-------------------------------------".

           STOP RUN.

Explicação dos Conceitos Chave

  • PIC 9(04)V99: Isso define um número de 4 dígitos inteiros e 2 decimais. O V é uma vírgula implícita (o COBOL guarda a posição, mas não gasta espaço de memória com o caractere vírgula).

  • PIC ZZZ.ZZ9,99: Chamamos isso de Máscara de Edição. No COBOL, você não pode imprimir uma variável de cálculo diretamente se quiser que ela fique bonita (com vírgulas e pontos). Você "move" o valor para essa máscara para exibição.

  • WITH NO ADVANCING: Faz com que o cursor fique na mesma linha da mensagem, igual ao end="" do Python.

Como rodar este código?

Se você tiver o GnuCOBOL instalado, salve o código como holerite.cob e rode:

  1. Compilar: cobc -x holerite.cob

  2. Executar: ./holerite (ou holerite.exe no Windows)

Show 🚀 então vamos avançar do jeito certo, como quem está se preparando pra trabalhar com COBOL de verdade, não só estudar teoria.

👉 PRÓXIMO PASSO: COBOL NA PRÁTICA (MÃO NA MASSA)

A partir daqui, o caminho profissional se divide em etapas claras. Vamos pela Etapa 1, que é obrigatória.


🟢 ETAPA 1 — MONTAR O AMBIENTE COBOL (PC NORMAL)

Vamos usar GnuCOBOL, que é o padrão fora do mainframe.

✅ Opção 1: Windows

  1. Baixe GnuCOBOL

  2. Durante a instalação:

    • Marque Add to PATH

  3. Teste no Prompt:

cobc -v

✅ Opção 2: Linux (Ubuntu / Debian)

sudo apt update
sudo apt install gnucobol

Teste:

cobc -v

🟢 ETAPA 2 — SEU PRIMEIRO PROGRAMA “PROFISSIONAL”

Crie o arquivo cliente.cob:

IDENTIFICATION DIVISION.
PROGRAM-ID. CLIENTE01.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NOME    PIC X(30).
01 WS-IDADE   PIC 9(03).

PROCEDURE DIVISION.
    DISPLAY "Digite o nome: "
    ACCEPT WS-NOME

    DISPLAY "Digite a idade: "
    ACCEPT WS-IDADE

    IF WS-IDADE >= 18
        DISPLAY "Cliente maior de idade"
    ELSE
        DISPLAY "Cliente menor de idade"
    END-IF

    STOP RUN.

Compile e execute:

cobc -x cliente.cob

🟢 ETAPA 3 — ENTENDER O QUE VOCÊ ACABOU DE FAZER

✔ Criou variáveis
✔ Leu dados do usuário
✔ Tomou decisão
✔ Compilou como sistema real

👉 Isso já é nível júnior em COBOL.


🟢 ETAPA 4 — ARQUIVOS (MUITO IMPORTANTE)

Agora você vai aprender o que COBOL faz melhor: processar arquivos.

Definição de arquivo

SELECT ARQ-CLIENTES ASSIGN TO "clientes.dat"
   ORGANIZATION IS LINE SEQUENTIAL.

Registro

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

Gravação

WRITE REG-CLIENTE.

🟢 ETAPA 5 — PRÓXIMA AULA (ESCOLHA)

Agora vem a parte chave pra mercado. Escolhe um caminho 👇

🔹 Opção A — Arquivos + Batch (bancário)

  • Processamento em lote

  • Milhões de registros

  • Base de bancos

🔹 Opção B — COBOL + Banco de Dados (SQL)

  • DB2 / Oracle / PostgreSQL

  • O que mais emprega

🔹 Opção C — COBOL + Sistemas modernos

  • COBOL + Java

  • COBOL + APIs REST

  • Migração de legado