Translate

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, 14 de fevereiro de 2007

O que é SQL no Mainframe?

 

Bellacosa Mainframe o que é SQL Mainframe

O que é SQL no Mainframe?

SQL significa:

Structured Query Language

É a linguagem usada para acessar e manipular dados armazenados em bancos relacionais, principalmente o:

  • DB2 for z/OS

  • IMS SQL

  • Db2 Distributed

No ambiente mainframe, SQL é a ponte entre os programas COBOL e os dados armazenados no banco.


Definição simples

SQL é:

a linguagem utilizada para consultar, incluir, alterar e remover dados em bancos de dados.

Sem SQL, um programa COBOL não conseguiria acessar diretamente uma tabela DB2.


Analogia simples

Imagine uma biblioteca gigante.

O DB2 é a biblioteca.

O SQL é o idioma usado para conversar com o bibliotecário.

Você pode dizer:

Me mostre todos os clientes.

ou

Atualize o saldo deste cliente.

Onde SQL é usado?

Principalmente em:

  • COBOL

  • CICS

  • Batch

  • Java

  • PL/I

  • REXX

  • Stored Procedures


SQL e DB2

Fluxo simplificado:

Programa COBOL
       ↓
      SQL
       ↓
      DB2
       ↓
     Dados

Principais comandos SQL

SELECT

Consulta dados.

SELECT *
FROM CLIENTES;

SELECT com filtro

SELECT NOME,
       SALDO
FROM CLIENTES
WHERE SALDO > 1000;

INSERT

Inclui registros.

INSERT INTO CLIENTES
VALUES
(1001,'JOAO SILVA',5000);

UPDATE

Atualiza registros.

UPDATE CLIENTES
SET SALDO = 8000
WHERE ID = 1001;

DELETE

Remove registros.

DELETE
FROM CLIENTES
WHERE ID = 1001;

SQL dentro do COBOL

No mainframe normalmente usamos:

Embedded SQL


Exemplo

EXEC SQL

   SELECT NOME
     INTO :WS-NOME

     FROM CLIENTES

    WHERE ID = :WS-ID

END-EXEC.

O que é EXEC SQL?

Indica ao pré-compilador DB2 que aquele trecho contém comandos SQL.


Host Variables

Variáveis COBOL utilizadas pelo SQL.


Exemplo

01 WS-ID      PIC 9(5).
01 WS-NOME    PIC X(30).

Uso:

WHERE ID = :WS-ID

O ":" identifica uma Host Variable.


SQLCODE

Após cada comando SQL o DB2 retorna um código.


Exemplo

IF SQLCODE = 0

SQLCODE mais comuns

SQLCODESignificado
0Sucesso
+100Registro não encontrado
-803Chave duplicada
-305Valor nulo
-911Deadlock
-904Recurso indisponível

SQLCA

Área de comunicação entre COBOL e DB2.


Inclusão

EXEC SQL
   INCLUDE SQLCA
END-EXEC.

SQLCA contém

  • SQLCODE

  • SQLSTATE

  • mensagens

  • estatísticas


O que é Cursor?

Quando um SELECT retorna várias linhas.


Exemplo

SELECT *
FROM CLIENTES

Pode retornar:

JOAO
MARIA
CARLOS
ANA

Cursor resolve isso

Fluxo:

DECLARE
    ↓
OPEN
    ↓
FETCH
    ↓
FETCH
    ↓
FETCH
    ↓
CLOSE

Exemplo

DECLARE C1 CURSOR FOR

SELECT NOME
FROM CLIENTES

FETCH

FETCH C1
INTO :WS-NOME

Lê uma linha por vez.


COMMIT

Confirma alterações.

COMMIT;

ROLLBACK

Desfaz alterações.

ROLLBACK;

Exemplo prático

UPDATE SALDO
      ↓
COMMIT

Grava definitivamente.


Exemplo erro

UPDATE SALDO
      ↓
ABEND
      ↓
ROLLBACK

Volta ao estado anterior.


SQL Estático

Mais comum em COBOL.


Exemplo

EXEC SQL
   SELECT ...
END-EXEC

Conhecido na compilação.


SQL Dinâmico

Montado em tempo de execução.


Exemplo

MOVE 'SELECT * FROM CLIENTES'
TO WS-COMANDO

Muito usado em ferramentas administrativas.


Processo de compilação

COBOL + SQL
      ↓
Pré-compilador DB2
      ↓
Compilador COBOL
      ↓
BIND
      ↓
Package
      ↓
Execução

O que é BIND?

Gera os objetos que permitem ao DB2 executar o SQL.


Ferramentas SQL famosas no Mainframe

  • SPUFI

  • DSNTEP2

  • QMF

  • Db2 Admin Tool

  • Data Studio


SQL x QSAM

SQL

Procure cliente 1000

DB2 encontra.


QSAM

Registro 1
Registro 2
Registro 3
...
Registro 1000

Leitura sequencial.


Vantagens do SQL

✅ Fácil leitura

✅ Menos código COBOL

✅ Acesso rápido aos dados

✅ Relacionamentos entre tabelas

✅ Alta produtividade


Curiosidades

1. SQL foi criado na IBM na década de 1970

2. O DB2 foi um dos primeiros bancos comerciais a usar SQL

3. Milhões de linhas COBOL executam SQL diariamente

4. Grande parte das transações bancárias depende de SQL no DB2


Resumo rápido

ComandoFunção
SELECTConsulta
INSERTInclusão
UPDATEAlteração
DELETEExclusão
COMMITConfirma
ROLLBACKDesfaz
CURSORPercorre linhas
FETCHLê linha
SQLCARetorno SQL
SQLCODECódigo de retorno

Conclusão

SQL é a linguagem que permite aos programas COBOL, CICS e aplicações do ambiente IBM Z acessar bancos de dados DB2. Ele é um dos pilares do processamento transacional moderno, tornando possível consultar, inserir, atualizar e excluir dados de forma segura, rápida e eficiente no mainframe.


terça-feira, 13 de fevereiro de 2007

O que é DB2 Mainframe?

 

Bellacosa Mainframe  o que é DB2 Mainframe

O que é DB2 Mainframe?

O DB2 for z/OS é o principal sistema gerenciador de banco de dados relacional (RDBMS) da IBM para o ambiente Mainframe IBM Z.

Quando você faz:

  • um PIX;

  • uma transferência bancária;

  • uma consulta de saldo;

  • uma compra com cartão;

há uma grande chance de existir um banco DB2 armazenando ou consultando essas informações.


Definição simples

DB2 é:

um banco de dados relacional corporativo de alta performance.

Ele armazena:

  • clientes;

  • contas;

  • contratos;

  • apólices;

  • transações;

  • produtos;

  • históricos.


Analogia simples

Imagine um enorme arquivo de fichas organizado.

O DB2 permite:

  • guardar informações;

  • localizar rapidamente;

  • atualizar dados;

  • remover registros;

  • relacionar tabelas.


História

O DB2 surgiu na IBM no início da década de 1980.

Foi um dos primeiros bancos comerciais baseados nos conceitos relacionais propostos por:

Edgar F. Codd


O que significa DB2?

Originalmente:

Database 2

Hoje a IBM usa oficialmente:

IBM Db2 for z/OS


Onde o DB2 roda?

Principalmente em:

  • IBM Z

  • z/OS

Mas também existem versões para:

  • Linux

  • Unix

  • Windows


Arquitetura simplificada

Aplicação COBOL
        ↓
SQL
        ↓
DB2
        ↓
Tablespaces
        ↓
Disco

O que é uma tabela?

Local onde os dados são armazenados.


Exemplo

Tabela CLIENTES

IDNOMESALDO
1JOÃO1000
2MARIA5000

Criando uma tabela

CREATE TABLE CLIENTES
(
   ID      INTEGER,
   NOME    VARCHAR(50),
   SALDO   DECIMAL(9,2)
);

O que é SQL?

Structured Query Language.

Linguagem usada para conversar com o DB2.


Comandos mais comuns

SELECT

Consulta dados.

SELECT *
FROM CLIENTES;

INSERT

Inclui registros.

INSERT INTO CLIENTES
VALUES (1,'JOAO',1000);

UPDATE

Atualiza registros.

UPDATE CLIENTES
SET SALDO = 2000
WHERE ID = 1;

DELETE

Remove registros.

DELETE
FROM CLIENTES
WHERE ID = 1;

DB2 e COBOL

Uma das combinações mais famosas da história da computação.


Exemplo

EXEC SQL

   SELECT NOME
   INTO :WS-NOME

   FROM CLIENTES

   WHERE ID = :WS-ID

END-EXEC.

O que é SQL embutido?

SQL escrito dentro do COBOL.

Chamado de:

Embedded SQL


Processo de compilação

COBOL + SQL
      ↓
Precompiler DB2
      ↓
Compilador COBOL
      ↓
Bind
      ↓
Execução

O que é BIND?

Processo que cria:

Package

e

Plan

necessários para execução SQL.


Objetos principais do DB2


Database

Container lógico.


Tablespace

Local físico onde as tabelas ficam.


Table

Armazena dados.


Index

Acelera pesquisas.


View

Consulta virtual.


Synonym / Alias

Nome alternativo.


Exemplo simplificado

DATABASE
   ↓
TABLESPACE
   ↓
TABLE

O que é Tablespace?

Área física onde o DB2 grava os dados.


O que é Index?

Estrutura que acelera consultas.


Sem índice

1
2
3
4
5
...

Procura sequencial.


Com índice

Índice
 ↓
Registro encontrado

Muito mais rápido.


O que é Cursor?

Usado quando um SELECT retorna várias linhas.


Exemplo

DECLARE C1 CURSOR FOR
SELECT NOME
FROM CLIENTES;

Operações com Cursor

DECLARE
   ↓
OPEN
   ↓
FETCH
   ↓
CLOSE

FETCH

Lê uma linha por vez.


SQLCODE

Código de retorno do DB2.

Muito importante.


Exemplos

SQLCODESignificado
0Sucesso
+100Registro não encontrado
-305Valor nulo
-803Chave duplicada
-904Recurso indisponível
-911Deadlock/Rollback

SQLCA

Área de comunicação SQL.


Exemplo

EXEC SQL
   INCLUDE SQLCA
END-EXEC.

O que é COMMIT?

Confirma alterações.


Exemplo

COMMIT;

O que é ROLLBACK?

Desfaz alterações.


Exemplo

ROLLBACK;

Fluxo transacional

UPDATE
   ↓
COMMIT

ou

UPDATE
   ↓
ERRO
   ↓
ROLLBACK

DB2 Online e Batch

Online

Normalmente:

  • CICS

  • IMS TM


Batch

Normalmente:

  • COBOL

  • JCL

  • Scheduler


Ferramentas comuns

  • SPUFI

  • DSNTEP2

  • QMF

  • Data Studio

  • Db2 Admin Tool


Como o DB2 aparece no dia a dia?

Praticamente em:

  • PIX

  • cartões

  • internet banking

  • seguros

  • e-commerce

  • governo


Curiosidades

1. Alguns bancos possuem bancos DB2 com dezenas de terabytes

2. O DB2 processa bilhões de transações diariamente

3. Muitas aplicações COBOL acessam DB2 há mais de 30 anos

4. O DB2 é considerado um dos bancos mais confiáveis do mundo


Erros comuns de iniciantes

Ignorar SQLCODE


Esquecer COMMIT


Não fechar CURSOR


Fazer SELECT sem índice


Não entender SQLCA


Resumo rápido

ConceitoFunção
DB2Banco de dados relacional
SQLLinguagem do DB2
TableArmazena dados
IndexAcelera consultas
CursorPercorre linhas
SQLCARetorno SQL
SQLCODECódigo de retorno
COMMITConfirma
ROLLBACKDesfaz
BINDGera Package/Plan

Conclusão

O DB2 for z/OS é um dos pilares do ecossistema Mainframe IBM Z. Ele fornece armazenamento relacional de alta disponibilidade, segurança e desempenho para aplicações COBOL, CICS, IMS e batch que processam milhões de transações críticas diariamente.

segunda-feira, 12 de fevereiro de 2007

Comandos COBOL para Manipulação de Arquivos: ACCESS MODE, FILE-CONTROL, FILE STATUS, OPEN, READ, START, WRITE, REWRITE, DELETE e CLOSE

Bellacosa Mainframe e comandos de mainupalação de datasets em Mainframe



Comandos COBOL para Manipulação de Arquivos: ACCESS MODE, FILE-CONTROL, FILE STATUS, OPEN, READ, START, WRITE, REWRITE, DELETE e CLOSE

Quando um programa COBOL trabalha com arquivos QSAM ou VSAM, existe um conjunto de comandos fundamentais que controlam toda a entrada, saída e atualização dos dados.

Esses comandos aparecem diariamente em sistemas:

  • bancários;

  • seguradoras;

  • cartões;

  • governo;

  • ERP;

  • processamento batch.


Visão Geral

FILE-CONTROL
     ↓
OPEN
     ↓
READ / START
     ↓
WRITE / REWRITE / DELETE
     ↓
CLOSE

FILE-CONTROL

Fica na:

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.

Responsável por:

  • associar arquivos;

  • definir organização;

  • definir acesso;

  • definir FILE STATUS.


Exemplo

SELECT ARQCLIENTE
       ASSIGN TO CLIENTE
       ORGANIZATION IS INDEXED
       ACCESS MODE IS DYNAMIC
       RECORD KEY IS CLI-ID
       FILE STATUS IS WS-FS.

ACCESS MODE

Define como o programa acessará o arquivo.


SEQUENTIAL

Leitura em sequência.

ACCESS MODE IS SEQUENTIAL

Fluxo:

REG1
 ↓
REG2
 ↓
REG3

Muito usado em:

  • QSAM

  • Batch


RANDOM

Acesso direto pela chave.

ACCESS MODE IS RANDOM

Exemplo:

PROCURA CLIENTE 1000

Vai diretamente ao registro.


DYNAMIC

Mistura Sequential e Random.

ACCESS MODE IS DYNAMIC

Muito comum em VSAM.


FILE STATUS

Retorno das operações do arquivo.


Declaração

01 WS-FS PIC XX.

Associação

FILE STATUS IS WS-FS

Status comuns

CódigoSignificado
00Sucesso
10EOF
22Chave duplicada
23Registro não encontrado
35Arquivo inexistente
39Definição incompatível
92Erro lógico
93Arquivo não aberto

OPEN

Abre o arquivo.


INPUT

Somente leitura.

OPEN INPUT ARQCLI

OUTPUT

Cria novo arquivo.

OPEN OUTPUT ARQSAIDA

I-O

Leitura e atualização.

OPEN I-O ARQVSAM

EXTEND

Acrescenta registros.

OPEN EXTEND ARQREL

READ

Lê um registro.


QSAM

READ ARQCLI

Com EOF

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

READ para VSAM

READ ARQVSAM

Lê o registro corrente.


READ NEXT

Muito usado em VSAM KSDS.


Exemplo

READ ARQVSAM NEXT RECORD

Fluxo

Registro 100
 ↓
READ NEXT
 ↓
Registro 101

START

Posiciona o ponteiro em uma chave.

Funciona apenas em arquivos indexados.


Exemplo

START ARQVSAM
   KEY IS >= WS-CHAVE
END-START

Fluxo

Chave procurada = 1000
       ↓
Posiciona no primeiro >= 1000

Muito usado para pesquisas.


WRITE

Grava novo registro.


Exemplo

WRITE REG-CLIENTE

Em arquivo sequencial

Registro gravado no final

Em VSAM

Registro incluído pela chave

Possível erro

FS = 22

Chave duplicada.


REWRITE

Atualiza registro existente.


Exemplo

REWRITE REG-CLIENTE

Fluxo

READ
 ↓
ALTERA DADOS
 ↓
REWRITE

Exemplo completo

READ ARQVSAM

MOVE 5000 TO CLI-SALDO

REWRITE REG-CLIENTE

DELETE

Remove registro.

Disponível em arquivos indexados.


Exemplo

DELETE ARQVSAM

Fluxo

READ
 ↓
DELETE
 ↓
Registro removido

Muito usado em:

  • VSAM KSDS

  • RRDS


Não funciona em QSAM

Arquivos sequenciais não suportam DELETE.


CLOSE

Fecha arquivo.


Exemplo

CLOSE ARQCLI

Sempre execute CLOSE

Evita:

  • perda de dados;

  • buffers pendentes;

  • inconsistências.


Exemplo Completo VSAM

OPEN I-O ARQCLI

MOVE 1000 TO WS-ID

START ARQCLI
   KEY >= WS-ID

READ ARQCLI NEXT RECORD

IF WS-FS = '00'

   MOVE 'NOVO NOME'
      TO CLI-NOME

   REWRITE REG-CLIENTE

END-IF

CLOSE ARQCLI

Ciclo de Vida de um Arquivo COBOL

FILE-CONTROL
      ↓
OPEN
      ↓
START
      ↓
READ
      ↓
WRITE
      ↓
REWRITE
      ↓
DELETE
      ↓
CLOSE

Resumo Rápido

ComandoFunção
FILE-CONTROLDefine arquivo
ACCESS MODETipo de acesso
FILE STATUSRetorno da operação
OPENAbre arquivo
READLê registro
READ NEXTPróximo registro
STARTPosiciona por chave
WRITEInclui registro
REWRITEAtualiza registro
DELETERemove registro
CLOSEFecha arquivo

Dica de Programador Mainframe

Para arquivos QSAM, normalmente você verá:

OPEN INPUT
READ
WRITE
CLOSE

Para arquivos VSAM KSDS, os comandos mais comuns são:

OPEN I-O
START
READ NEXT
WRITE
REWRITE
DELETE
CLOSE

Esses são os comandos fundamentais que formam a base de praticamente todos os programas COBOL que manipulam arquivos no ambiente IBM Z.


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.