Translate

domingo, 11 de fevereiro de 2007

O que é Dataset QSAM?

 

Bellacosa Mainframe o q é dataset QSAM

O que é Dataset QSAM?

QSAM significa:

Queued Sequential Access Method

É um dos métodos de acesso a arquivos mais antigos, importantes e utilizados da história do mainframe.

Praticamente todo programador COBOL batch trabalha com QSAM em algum momento.


Definição simples

QSAM é:

o método de acesso usado para ler e gravar arquivos sequenciais no z/OS.

Quando falamos de um dataset sequencial (PS), normalmente estamos falando de um arquivo acessado através do QSAM.


Analogia simples

Imagine uma fita cassete.

Você precisa ouvir:

Música 1
 ↓
Música 2
 ↓
Música 3
 ↓
Música 4

Não pode pular diretamente para a música 4.

O QSAM funciona da mesma forma.


Fluxo QSAM

Registro 1
    ↓
Registro 2
    ↓
Registro 3
    ↓
Registro 4

Leitura sequencial.


Onde o QSAM é usado?

Principalmente em:

  • COBOL Batch

  • PL/I

  • Assembler

  • Easytrieve

  • SORT

  • Syncsort

  • DFSORT

  • JCL


Tipo de Dataset

Normalmente:

PS (Physical Sequential)

Exemplo de Dataset QSAM

BANCO.CLIENTES.ARQ

Conteúdo:

00001JOAO SILVA
00002MARIA SOUZA
00003CARLOS LIMA

Como o COBOL acessa?

Na ENVIRONMENT DIVISION:

SELECT ARQCLI
ASSIGN TO CLIENTE
ORGANIZATION IS SEQUENTIAL.

Na FILE SECTION

FD ARQCLI.

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

Leitura QSAM

READ ARQCLI

A cada READ:

Registro 1
 ↓
Registro 2
 ↓
Registro 3

Escrita QSAM

WRITE REG-CLIENTE

O novo registro é gravado no final do arquivo.


Operações principais

OPEN

OPEN INPUT ARQCLI

READ

READ ARQCLI

WRITE

WRITE REG-CLIENTE

CLOSE

CLOSE ARQCLI

Como o JCL participa?

//CLIENTE DD DSN=BANCO.CLIENTES.ARQ,
//            DISP=SHR

Fluxo:

JCL
 ↓
DDNAME
 ↓
QSAM
 ↓
COBOL

O que é Buffering?

O QSAM utiliza buffers em memória.

Em vez de ler um registro por vez:

Disco
 ↓
Buffer
 ↓
Programa

Isso melhora muito a performance.


O que significa "Queued"?

O sistema mantém uma fila de registros em memória.

Por isso o nome:

Queued Sequential Access Method

QSAM x BSAM

QSAM

Mais simples.

O sistema controla os buffers.

Programa
 ↓
QSAM
 ↓
Disco

BSAM

Mais baixo nível.

O programador controla os buffers.

Programa
 ↓
Buffer Manual
 ↓
Disco

QSAM x VSAM

QSAM

Acesso sequencial.

1
↓
2
↓
3
↓
4

VSAM KSDS

Acesso por chave.

PROCURA CHAVE 00003
       ↓
Registro encontrado

Vantagens do QSAM

✅ Simples

✅ Excelente para batch

✅ Muito rápido

✅ Fácil programação COBOL

✅ Baixo consumo de recursos


Desvantagens

❌ Não possui índice

❌ Não acessa diretamente um registro específico

❌ Necessita percorrer registros anteriores


Casos de uso clássicos

Folha salarial

Funcionário 1
Funcionário 2
Funcionário 3
...

Relatórios

Cliente 1
Cliente 2
Cliente 3
...

Processamento bancário

Transação 1
Transação 2
Transação 3
...

Exemplo Batch Completo

OPEN INPUT ARQCLI

PERFORM UNTIL EOF = 'S'

   READ ARQCLI
      AT END
         MOVE 'S' TO EOF

      NOT AT END
         PERFORM PROCESSAR

   END-READ

END-PERFORM

CLOSE ARQCLI

Curiosidades

1. Grande parte dos batchs do mundo ainda utiliza QSAM

2. O QSAM existe desde os primeiros sistemas OS/360

3. Muitos bancos processam bilhões de registros QSAM diariamente

4. DFSORT e Syncsort trabalham intensamente com datasets QSAM


Erros comuns de iniciantes

Esquecer OPEN


Não tratar EOF


Layout incompatível


DDNAME diferente do ASSIGN


Não verificar FILE STATUS


Resumo rápido

ConceitoSignificado
QSAMQueued Sequential Access Method
Tipo de ArquivoSequencial (PS)
AcessoSequencial
Comando COBOLREAD / WRITE
PerformanceAlta
ÍndiceNão
Uso PrincipalBatch
BufferAutomático

Conclusão

O QSAM é o método de acesso padrão para datasets sequenciais no z/OS. Ele utiliza buffers automáticos e acesso sequencial aos registros, sendo a base de grande parte dos programas COBOL batch executados diariamente nos ambientes IBM Z.


sábado, 10 de fevereiro de 2007

O que é Copybook no COBOL?

 

Bellacosa Mainframe apresenta o copybook em Cobol


O que é Copybook no COBOL?

Um dos recursos mais importantes do COBOL é o:

Copybook

Ele permite reutilizar estruturas de dados e trechos de código em vários programas, evitando duplicação e facilitando a manutenção dos sistemas.

Em grandes ambientes bancários e corporativos, é comum existirem:

  • milhares de programas COBOL;

  • centenas de copybooks compartilhados;

  • layouts padronizados usados por toda a empresa.


Definição simples

Copybook é:

um arquivo reutilizável contendo definições COBOL.

Normalmente ele armazena:

  • layouts de registros;

  • estruturas de arquivos;

  • áreas de comunicação;

  • parâmetros de programas;

  • campos de telas CICS.


Analogia simples

Imagine um formulário padrão de cliente.

Em vez de recriar o formulário em cada programa, você cria apenas uma vez e reutiliza em todos.

O Copybook funciona exatamente assim.


Onde ele é usado?

Principalmente na:

DATA DIVISION

Exemplo sem Copybook

01 CLIENTE.
   05 CLI-NOME      PIC X(30).
   05 CLI-ENDERECO  PIC X(50).
   05 CLI-SALDO     PIC S9(7)V99 COMP-3.

Agora imagine repetir isso em 500 programas.


Solução

Criar um Copybook.


Exemplo do Copybook

Membro:

COPYLIB(CLIENTE)

Conteúdo:

01 CLIENTE.
   05 CLI-NOME      PIC X(30).
   05 CLI-ENDERECO  PIC X(50).
   05 CLI-SALDO     PIC S9(7)V99 COMP-3.

Como usar?

No programa COBOL:

WORKING-STORAGE SECTION.

COPY CLIENTE.

Durante a compilação, o compilador substitui o COPY pelo conteúdo do Copybook.


O que acontece internamente?

COPY CLIENTE
      ↓
Compilador expande
      ↓
Layout inserido
      ↓
Compilação continua

Onde os Copybooks ficam?

Normalmente em:

USER.COPYLIB
EMPRESA.COBOL.COPYLIB
BANCO.COPYLIB

Geralmente em:

  • PDS;

  • PDSE.


Estrutura típica

EMPRESA.COPYLIB
    |
    +-- CLIENTE
    +-- PRODUTO
    +-- ENDERECO
    +-- CONTRATO

O comando COPY

Sintaxe básica:

COPY CLIENTE.

Exemplo completo

DATA DIVISION.

WORKING-STORAGE SECTION.

COPY CLIENTE.

PROCEDURE DIVISION.

DISPLAY CLI-NOME.

Copybook para arquivos

Muito comum.


Exemplo

FD ARQCLIENTE.

COPY CLIREG.

Copybook CLIREG

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

Vantagem

Se o layout mudar:

30 bytes
↓
40 bytes

Alteramos apenas o Copybook.

Todos os programas passam a usar a nova estrutura.


Copybook para parâmetros

Muito usado com:

CALL

Exemplo

Programa chamador:

CALL 'CALCSAL'
USING DADOS-CLIENTE

Copybook compartilhado

01 DADOS-CLIENTE.
   05 CODIGO PIC 9(5).
   05 SALDO  PIC S9(7)V99.

Copybook em CICS

Extremamente comum.


Exemplo

EXEC CICS RECEIVE MAP(...)

Mapas BMS geralmente geram Copybooks.


Copybook em DB2

Muito usado com host variables.


Exemplo

EXEC SQL
   INCLUDE SQLCA
END-EXEC

SQLCA é um Copybook

Contém:

  • SQLCODE;

  • SQLSTATE;

  • informações da execução SQL.


Copybooks famosos


SQLCA

Retorno DB2.


DFHAID

Teclas PF do CICS.


DFHBMSCA

Mapas CICS.


DCLGEN

Layouts gerados pelo DB2.


O que é REPLACING?

Permite substituir textos durante o COPY.


Exemplo

Copybook:

05 CAMPO PIC X(10).

Uso:

COPY CLIENTE
REPLACING CAMPO BY NOME.

Muito usado em frameworks COBOL


Benefícios do Copybook


Reutilização


Padronização


Menos código duplicado


Facilidade manutenção


Menos erros


Integração entre sistemas


Problemas comuns

Alterar Copybook sem analisar impacto

Pode afetar centenas de programas.


Copiar layouts incompatíveis

Pode causar:

  • S0C7;

  • truncamento;

  • dados incorretos.


Não versionar Copybooks

Dificulta manutenção.


Boas práticas

✅ Um Copybook para cada entidade de negócio

✅ Nome padronizado

✅ Documentar alterações

✅ Evitar campos sem descrição

✅ Manter compatibilidade sempre que possível


Como identificar um Copybook?

Normalmente aparecem comandos como:

COPY CLIENTE.

ou

EXEC SQL
   INCLUDE SQLCA
END-EXEC.

Curiosidades

1. Alguns bancos possuem mais de 50 mil Copybooks em produção

2. Uma alteração em um único Copybook pode impactar centenas de aplicações

3. Copybooks são uma das bases da reutilização no COBOL

4. Muitos layouts de arquivos, VSAM e DB2 são compartilhados via Copybook


Resumo rápido

ConceitoFunção
CopybookArquivo reutilizável
COPYInclui Copybook
COPYLIBBiblioteca de Copybooks
SQLCACopybook DB2
DFHAIDCopybook CICS
REPLACINGSubstituição dinâmica
DCLGENGeração layouts DB2

Conclusão

O Copybook é um dos mecanismos mais importantes do COBOL. Ele permite compartilhar layouts, parâmetros e estruturas entre programas, garantindo padronização, reutilização e manutenção eficiente dos sistemas corporativos executados no ambiente IBM Z.


sexta-feira, 9 de fevereiro de 2007

SECTION e PERFORM no COBOL

Bellacosa Mainframe apresenta Section e Paragrafos no COBOL uso do perform

SECTION e PERFORM no COBOL

Depois de aprender IF, READ e variáveis, o próximo grande passo para um programador COBOL é dominar:

  • SECTION;

  • PARAGRAPH;

  • PERFORM;

  • PERFORM INLINE;

  • PERFORM OUT-OF-LINE;

  • PERFORM UNTIL;

  • PERFORM VARYING;

  • TEST BEFORE;

  • TEST AFTER;

  • TIMES.

Esses comandos controlam praticamente toda a lógica dos programas COBOL batch e online.


O que é SECTION?

SECTION é:

um agrupamento de parágrafos.

Ela organiza grandes blocos de processamento.


Exemplo

PROCESSAMENTO SECTION.

VALIDAR-CLIENTE.
   DISPLAY 'VALIDANDO'.

CALCULAR-LIMITE.
   DISPLAY 'CALCULANDO'.

Hierarquia COBOL

DIVISION
   ↓
SECTION
   ↓
PARAGRAPH
   ↓
STATEMENTS

O que é PARAGRAPH?

É uma rotina lógica.


Exemplo

CALCULAR-TOTAL.

Analogia simples

Imagine uma empresa.

FINANCEIRO (SECTION)
   ↓
CALCULAR-JUROS
GERAR-BOLETO
ATUALIZAR-SALDO

RH (SECTION)
   ↓
CALCULAR-FOLHA
GERAR-HOLERITE

O que é PERFORM?

PERFORM é o comando usado para:

executar rotinas.


Exemplo

PERFORM CALCULAR-TOTAL

Fluxo

MAIN
 ↓
PERFORM CALCULAR-TOTAL
 ↓
Executa rotina
 ↓
Retorna

PERFORM OUT-OF-LINE

É o PERFORM tradicional.

Chama um parágrafo ou SECTION externa.


Exemplo

MAIN.

   PERFORM PROCESSAR-CLIENTE

   STOP RUN.

PROCESSAR-CLIENTE.

   DISPLAY 'PROCESSANDO'.

Fluxo

MAIN
 ↓
PERFORM
 ↓
PROCESSAR-CLIENTE
 ↓
RETORNA

Vantagens

  • reutilização;

  • modularização;

  • manutenção.


PERFORM INLINE

Executa comandos diretamente.

Não precisa criar parágrafo.


Exemplo

PERFORM

   DISPLAY 'PROCESSANDO'

END-PERFORM

Fluxo

PERFORM
 ↓
EXECUTA BLOCO
 ↓
FIM

Quando usar INLINE?

Pequenas lógicas.


Quando usar OUTLINE?

Processamentos maiores.


Chamar um parágrafo

PERFORM CALCULAR-TOTAL

Chamar vários parágrafos

PERFORM INICIALIZA
PERFORM PROCESSA
PERFORM FINALIZA

PERFORM THRU

Executa vários parágrafos em sequência.


Exemplo

PERFORM INICIO
   THRU FIM

Exemplo completo

INICIO.

   DISPLAY '1'.

MEIO.

   DISPLAY '2'.

FIM.

   DISPLAY '3'.

Resultado:

1
2
3

PERFORM SECTION

Também pode chamar uma SECTION inteira.


Exemplo

PERFORM PROCESSAMENTO

Onde PROCESSAMENTO é:

PROCESSAMENTO SECTION.

PERFORM TIMES

Executa quantidade fixa.


Exemplo

PERFORM 5 TIMES

   DISPLAY 'OLA'

END-PERFORM

Resultado

OLA
OLA
OLA
OLA
OLA

Muito usado para

  • testes;

  • repetições simples;

  • validações.


PERFORM UNTIL

Loop até condição verdadeira.


Exemplo

PERFORM UNTIL EOF = 'S'

   READ ARQCLI

END-PERFORM

Fluxo

CONDIÇÃO?
 ↓
FALSA
 ↓
EXECUTA
 ↓
TESTA NOVAMENTE

Muito usado em leitura de arquivos


PERFORM VARYING

Equivalente ao FOR.


Exemplo

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

   DISPLAY WS-I

END-PERFORM

Resultado

1
2
3
4
5
6
7
8
9
10

O que é contador?

Variável usada para controlar repetições.


Exemplo

01 WS-I PIC 9(3).

Contador manual

ADD 1 TO WS-I

Contador automático

PERFORM VARYING

TEST BEFORE

Condição testada antes.

Padrão COBOL.


Exemplo

PERFORM UNTIL WS-I > 10

   DISPLAY WS-I

END-PERFORM

Fluxo

TESTA
 ↓
EXECUTA
 ↓
TESTA

Pode não executar nenhuma vez


Exemplo

WS-I = 20

Nunca entra no loop.


TEST AFTER

Condição testada depois.

Executa pelo menos uma vez.


Exemplo

PERFORM WITH TEST AFTER
UNTIL WS-I > 10

   DISPLAY WS-I

END-PERFORM

Fluxo

EXECUTA
 ↓
TESTA
 ↓
EXECUTA

Similar ao DO-WHILE


Comparação

TipoTeste
TEST BEFOREAntes
TEST AFTERDepois

Exemplo visual

TEST BEFORE

Condição?
 ↓
Executa

TEST AFTER

Executa
 ↓
Condição?

Exemplo clássico de leitura batch

OPEN INPUT ARQCLI

PERFORM UNTIL EOF = 'S'

   READ ARQCLI
      AT END
         MOVE 'S' TO EOF

      NOT AT END
         PERFORM PROCESSAR

   END-READ

END-PERFORM

CLOSE ARQCLI

Tipos mais usados de PERFORM

TipoUso
PERFORM parágrafoExecuta rotina
PERFORM THRUExecuta faixa
PERFORM SECTIONExecuta SECTION
PERFORM TIMESRepetição fixa
PERFORM UNTILRepetição por condição
PERFORM VARYINGLoop contador
TEST BEFORETesta antes
TEST AFTERTesta depois
INLINECódigo embutido
OUT-OF-LINERotina externa

Erros comuns de iniciantes

Usar THRU excessivamente

Pode gerar manutenção difícil.


Esquecer contador no VARYING

Loop infinito.


Não controlar EOF

Loop infinito em arquivos.


Usar SECTION gigantes

Dificulta manutenção.


Dicas de programador experiente

✅ Prefira PERFORM de parágrafos nomeados

✅ Use VARYING para tabelas

✅ Use UNTIL para leitura de arquivos

✅ Use TEST AFTER quando precisar executar ao menos uma vez

✅ Evite GO TO quando possível

✅ Mantenha SECTIONs pequenas e organizadas


Resumo rápido

SECTION
 ↓
Agrupa parágrafos

PARAGRAPH
 ↓
Contém lógica

PERFORM
 ↓
Executa rotina

TIMES
 ↓
Quantidade fixa

UNTIL
 ↓
Até condição

VARYING
 ↓
Contador automático

TEST BEFORE
 ↓
Testa antes

TEST AFTER
 ↓
Testa depois

Dominar SECTION e PERFORM é um dos maiores passos para evoluir de programador COBOL iniciante para desenvolvedor capaz de entender e manter aplicações corporativas de grande porte em bancos, seguradoras e sistemas críticos do ambiente IBM Z.

quinta-feira, 8 de fevereiro de 2007

Leitura de Dataset no COBOL

Bellacosa Mainframe e a leitura de dados de um dataset cobol


Leitura de Dataset no COBOL

Uma das funções mais importantes do COBOL no mainframe é:

processamento de arquivos.

Grande parte dos sistemas batch trabalha lendo:

  • datasets sequenciais;

  • VSAM;

  • arquivos financeiros;

  • relatórios;

  • cargas;

  • integrações.

Por isso, entender:

  • ENVIRONMENT DIVISION;

  • DATA DIVISION;

  • FILE SECTION;

  • FILE STATUS;

  • layouts;

  • associação com JCL;

é fundamental no ambiente:

IBM Z / zOS.


Fluxo geral da leitura de arquivos

JCL
 ↓
DDNAME
 ↓
ENVIRONMENT DIVISION
 ↓
SELECT / ASSIGN
 ↓
FILE SECTION
 ↓
FD
 ↓
READ
 ↓
PROCESSAMENTO

Onde o arquivo é definido no COBOL?

Principalmente em:

  • ENVIRONMENT DIVISION;

  • DATA DIVISION.


ENVIRONMENT DIVISION

Responsável por:

ambiente e associação dos arquivos.


Estrutura clássica

ENVIRONMENT DIVISION.

INPUT-OUTPUT SECTION.

FILE-CONTROL.

O que é FILE-CONTROL?

Área onde o COBOL:

associa arquivos lógicos ao JCL.


Exemplo

SELECT ARQCLIENTE
ASSIGN TO CLIENTE
ORGANIZATION IS SEQUENTIAL.

Explicando

ElementoFunção
ARQCLIENTENome lógico COBOL
CLIENTEDDNAME do JCL
SEQUENTIALOrganização arquivo

O que é ASSIGN?

Faz ligação entre:

  • COBOL;

  • JCL.


Relação COBOL ↔ JCL

COBOL: ASSIGN TO CLIENTE
            ↓
JCL: //CLIENTE DD DSN=...

Exemplo completo no JCL

//STEP1 EXEC PGM=COBPGM

//CLIENTE DD DSN=EMPRESA.CLIENTES,
//            DISP=SHR

Como COBOL encontra o dataset?

Pelo:

DDNAME.


DATA DIVISION

Responsável pelos:

dados e layouts.


Estrutura típica

DATA DIVISION.

FILE SECTION.

O que é FILE SECTION?

Define:

layout do arquivo.


Exemplo

FD ARQCLIENTE.

01 REG-CLIENTE.
   05 CLI-ID       PIC 9(5).
   05 CLI-NOME     PIC X(30).
   05 CLI-SALDO    PIC 9(7)V99.

O que é FD?

File Description

Define:

  • características;

  • layout;

  • estrutura registro.


O que é REG-CLIENTE?

Área memória usada no:

READ.


Fluxo do READ

READ ARQCLIENTE
      ↓
registro carregado
      ↓
REG-CLIENTE preenchido

Exemplo simples de leitura

READ ARQCLIENTE

Leitura completa correta

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

O que é EOF?

End Of File

Fim arquivo.


Controle clássico batch

PERFORM UNTIL EOF = 'S'

   READ ARQCLIENTE
      AT END
         MOVE 'S' TO EOF

      NOT AT END
         PERFORM PROCESSA

   END-READ

END-PERFORM

O que é FILE STATUS?

Código retorno da operação arquivo.

Muito importante no COBOL.


Definição FILE STATUS

Fica na:

WORKING-STORAGE.


Exemplo

01 WS-FS-CLIENTE PIC XX.

Associando FILE STATUS

SELECT ARQCLIENTE
ASSIGN TO CLIENTE
FILE STATUS IS WS-FS-CLIENTE.

O que ele faz?

Após:

  • OPEN;

  • READ;

  • WRITE;

  • CLOSE;

o COBOL grava:

status da operação.


Exemplo status comuns

StatusSignificado
00OK
10EOF
35Arquivo inexistente
39Layout incompatível
92Erro lógico
93Arquivo não aberto

Exemplo validação

IF WS-FS-CLIENTE NOT = '00'
   DISPLAY 'ERRO ARQUIVO'
END-IF

O que é OPEN?

Abre arquivo.


Exemplos

OPEN INPUT ARQCLIENTE

Leitura.


OPEN OUTPUT ARQREL

Saída.


OPEN I-O ARQVSAM

Leitura e gravação.


O que é CLOSE?

Fecha arquivo.


Exemplo

CLOSE ARQCLIENTE

Tipos comuns de arquivos COBOL


Sequential

Sequencial.


Indexed

VSAM KSDS.


Relative

Acesso relativo.


Line Sequential

Texto.


Organização do arquivo

ORGANIZATION IS SEQUENTIAL

Acesso

ACCESS MODE IS SEQUENTIAL

Exemplo completo

ENVIRONMENT DIVISION.

INPUT-OUTPUT SECTION.

FILE-CONTROL.

SELECT ARQCLIENTE
ASSIGN TO CLIENTE
ORGANIZATION IS SEQUENTIAL
FILE STATUS IS WS-FS.

DATA DIVISION.

FILE SECTION.

FD ARQCLIENTE.

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

WORKING-STORAGE SECTION.

01 WS-FS         PIC XX.
01 EOF           PIC X VALUE 'N'.

PROCEDURE DIVISION.

MAIN.

   OPEN INPUT ARQCLIENTE

   PERFORM UNTIL EOF = 'S'

      READ ARQCLIENTE
         AT END
            MOVE 'S' TO EOF

         NOT AT END
            DISPLAY CLI-NOME

      END-READ

   END-PERFORM

   CLOSE ARQCLIENTE

   STOP RUN.

O que é layout?

Estrutura do registro.


Exemplo

12345JOAO SILVA                 0001500

Layout correspondente

05 ID     PIC 9(5).
05 NOME   PIC X(30).
05 SALDO  PIC 9(7).

O que acontece se layout estiver errado?

Pode causar:

  • lixo dados;

  • truncamento;

  • ABEND;

  • S0C7.


COBOL e JCL trabalham juntos


JCL

Entrega dataset.


COBOL

Processa dataset.


Fluxo real

Dataset
 ↓
JCL DD
 ↓
ASSIGN
 ↓
READ
 ↓
REGISTRO MEMÓRIA
 ↓
PROCESSAMENTO

O que é DISP=SHR?

Compartilhado.


O que é DISP=OLD?

Uso exclusivo.


Como isso aparece no batch?

Praticamente em:

  • bancos;

  • folha salarial;

  • PIX;

  • cartões;

  • faturamento.


Curiosidades incríveis

1. Muitos batchs processam bilhões de registros COBOL diariamente


2. FILE STATUS evita muitos ABENDs


3. Grande parte do mundo financeiro ainda depende fortemente de arquivos sequenciais


4. JCL + COBOL é uma das integrações mais clássicas do mainframe


Erros comuns de iniciantes


1. Esquecer OPEN


2. Não tratar FILE STATUS


3. Layout incompatível


4. DDNAME diferente do ASSIGN


5. Não controlar EOF


Dicas importantes

Sempre trate FILE STATUS


Controle EOF corretamente


Valide layouts


Nomeie DDNAME claramente


Resumo rápido

ElementoFunção
SELECTDefine arquivo lógico
ASSIGNLiga ao JCL
FDDefine layout
READLê registro
FILE STATUSRetorno operação
OPENAbre arquivo
CLOSEFecha arquivo
EOFFim arquivo

Conclusão

A leitura de arquivos é uma das bases do COBOL batch no ambiente mainframe IBM Z.

ENVIRONMENT DIVISION, DATA DIVISION, FILE SECTION, FILE STATUS e integração com JCL permitem processar grandes volumes de dados com segurança, organização e alta confiabilidade no z/OS. 

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.


terça-feira, 6 de fevereiro de 2007

Variáveis COBOL: COMP-1, COMP-2, COMP-3, COMP-4, COMP-5, Tipos Numéricos, LEVEL 01, 66, 77, 88

 

Bellacosa Mainframe e a estrutura do cobol com suas variaveis 

Variáveis COBOL: COMP-1, COMP-2, COMP-3, COMP-4, COMP-5, Tipos Numéricos, LEVEL 01, 66, 77, 88

Uma das partes mais importantes do COBOL é o:

tratamento de dados.

O COBOL foi criado para:

  • negócios;

  • bancos;

  • contabilidade;

  • processamento financeiro.

Por isso ele possui um sistema extremamente rico de:

  • variáveis;

  • formatos;

  • níveis;

  • tipos numéricos.


O que é uma variável no COBOL?

Variável é:

uma área de memória usada para armazenar dados.


Exemplo simples

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

Estrutura básica de variável COBOL

LEVEL  NOME      PIC

Exemplo

01 WS-IDADE PIC 9(3).

LEVEL NUMBER

O número inicial indica:

nível hierárquico.


Exemplo

01 CLIENTE.
   05 NOME PIC X(30).
   05 IDADE PIC 9(3).

Hierarquia visual

01 CLIENTE
   ↓
05 NOME
05 IDADE

Tipos básicos de dados COBOL


Numérico

Usa:

PIC 9

Exemplo

01 WS-VALOR PIC 9(5).

Aceita:

12345

Alfanumérico

Usa:

PIC X

Exemplo

01 WS-NOME PIC X(20).

Aceita:

  • letras;

  • números;

  • símbolos.


Alfabético

Usa:

PIC A

Exemplo

01 WS-LETRAS PIC A(10).

Aceita:

apenas letras e espaços.


O que é PIC?

Picture Clause

Define:

formato da variável.


Exemplos importantes


PIC X(10)

Texto.


PIC 9(5)

Número inteiro.


PIC 9(5)V99

Decimal implícito.


O que significa V?

Vírgula decimal implícita.


Exemplo

PIC 9(5)V99

Valor:

1234567

Interpretado como:

12345,67

Tipos COMP no COBOL

Os COMP representam:

formatos internos de armazenamento.

Usados para:

  • performance;

  • economia memória;

  • cálculos rápidos.


COMP

Também chamado:

binário.


Exemplo

01 WS-VALOR PIC S9(4) COMP.

Muito usado para:

  • contadores;

  • índices;

  • performance.


COMP-1

Floating Point Simples Precisão


Usa ponto flutuante


Exemplo

01 WS-REAL PIC S9(5)V99 COMP-1.

Muito usado em:

  • cálculos científicos;

  • engenharia.


COMP-2

Floating Point Dupla Precisão


Mais precisão que COMP-1


Exemplo

01 WS-DOUBLE PIC S9(10)V99 COMP-2.

COMP-3

O mais famoso do COBOL.

Packed Decimal


Armazena números compactados

Muito usado em:

  • bancos;

  • financeiro;

  • batch.


Exemplo

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

Vantagens

  • economiza espaço;

  • excelente precisão decimal.


Muito importante em:

  • dinheiro;

  • contabilidade.


O que causa S0C7?

Frequentemente:

erro em COMP-3 inválido.


COMP-4

Representação:

binária.

Dependente compilador/plataforma.


Exemplo

01 WS-CONTADOR PIC S9(4) COMP-4.

COMP-5

Binário nativo

Mais próximo da arquitetura máquina.


Muito usado em:

  • integração;

  • performance;

  • chamadas sistema.


Exemplo

01 WS-INDICE PIC S9(9) COMP-5.

Diferença simplificada

TipoCaracterística
COMP-1Float simples
COMP-2Float dupla
COMP-3Decimal compactado
COMP-4Binário
COMP-5Binário nativo

O que é VARCHAR no COBOL?

COBOL tradicional não possui VARCHAR nativo como SQL.

Mas pode simular usando:

  • tamanho;

  • conteúdo variável.


Exemplo comum

01 WS-NOME.
   49 WS-NOME-LEN PIC S9(4) COMP.
   49 WS-NOME-TXT PIC X(100).

Muito usado com DB2

Especialmente em:

VARCHAR DB2.


LEVEL NUMBERS no COBOL


LEVEL 01

Maior estrutura lógica.


Exemplo

01 CLIENTE.

LEVEL 05

Subcampo.


LEVEL 49

Muito usado em VARCHAR.


LEVEL 66

RENAMES

Cria nome alternativo para grupo.


Exemplo

66 DADOS-CLIENTE RENAMES NOME THRU SALDO.

LEVEL 77

Variável independente simples.


Exemplo

77 WS-TOTAL PIC 9(5).

Não possui subníveis


LEVEL 88

Condition Name

Muito poderoso no COBOL.

Cria:

condições legíveis.


Exemplo

01 WS-STATUS PIC X.

   88 STATUS-OK VALUE 'S'.
   88 STATUS-ERRO VALUE 'N'.

Uso

IF STATUS-OK

Muito mais legível.


Sem 88 seria:

IF WS-STATUS = 'S'

Vantagens do LEVEL 88

  • legibilidade;

  • manutenção;

  • semântica negócio.


Exemplo real completo

01 CLIENTE.
   05 NOME        PIC X(30).
   05 SALDO       PIC S9(7)V99 COMP-3.
   05 STATUS      PIC X.

      88 ATIVO    VALUE 'A'.
      88 BLOQUEADO VALUE 'B'.

Como isso aparece no dia a dia?

Praticamente em:

  • bancos;

  • PIX;

  • cartões;

  • DB2;

  • batch;

  • CICS.


Curiosidades incríveis

1. COMP-3 é um dos formatos mais famosos do mundo mainframe


2. Muitos sistemas financeiros dependem fortemente de packed decimal


3. LEVEL 88 é amado por programadores COBOL experientes


4. Grande parte dos ABEND S0C7 envolve COMP-3


Erros comuns de iniciantes


1. Confundir PIC X com PIC 9


2. Não entender decimal implícito


3. Usar COMP inadequadamente


4. Ignorar LEVEL 88


Dicas importantes

Use COMP-3 para valores monetários


Use LEVEL 88 para regras negócio


Organize variáveis hierarquicamente


Entenda packed decimal


Resumo rápido

ElementoFunção
PIC XTexto
PIC 9Numérico
PIC AAlfabético
COMP-1Float simples
COMP-2Float dupla
COMP-3Packed decimal
COMP-4Binário
COMP-5Binário nativo
01Estrutura principal
66RENAMES
77Variável isolada
88Condição lógica

Conclusão

O sistema de variáveis do COBOL é extremamente poderoso e foi projetado para suportar processamento corporativo de alta confiabilidade.

Tipos COMP, níveis hierárquicos e estruturas como LEVEL 88 tornam o COBOL ideal para sistemas financeiros críticos 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.