Translate

quinta-feira, 8 de março de 2007

O que é um Dataset VSAM no Mainframe e Como Ele é Usado em COBOL?

 


O que é um Dataset VSAM no Mainframe e Como Ele é Usado em COBOL?

Quando falamos de armazenamento de dados no ambiente z/OS, existem dois grandes mundos:

  • Arquivos Sequenciais (QSAM)

  • Arquivos VSAM

O VSAM é um dos métodos de armazenamento mais importantes do Mainframe IBM Z e é amplamente utilizado por aplicações COBOL bancárias, financeiras e governamentais.


O que significa VSAM?

VSAM significa:

Virtual Storage Access Method

Foi introduzido pela IBM em 1973 para substituir métodos mais antigos de acesso a dados.


O que é um Dataset VSAM?

Um Dataset VSAM é um arquivo especial que permite:

  • acesso direto aos registros;

  • pesquisa rápida;

  • atualização online;

  • inclusão e exclusão de registros;

  • uso de chaves de acesso.

Diferente de um arquivo sequencial, não é necessário ler tudo desde o início para encontrar um registro.


Analogia simples

Imagine uma lista telefônica.

Arquivo Sequencial

Você procura página por página.

CLIENTE 0001
CLIENTE 0002
CLIENTE 0003
...

VSAM

Você vai diretamente ao nome desejado usando um índice.

ÍNDICE
 ↓
CLIENTE 12345

Muito mais rápido.


Principais tipos de VSAM

Existem quatro tipos principais.


KSDS

Key Sequenced Data Set

O mais utilizado.

Possui:

  • chave;

  • índice;

  • acesso direto.


Exemplo:

CPF
CONTA
AGÊNCIA

Muito usado em:

  • bancos;

  • cadastro clientes;

  • contas correntes.


ESDS

Entry Sequenced Data Set

Registros gravados em sequência.

Não possui chave primária.


Acesso por:

  • posição física;

  • RBA (Relative Byte Address).


Usado para:

  • logs;

  • trilhas auditoria;

  • históricos.


RRDS

Relative Record Data Set

Acesso por número relativo.


Exemplo

Registro 1
Registro 2
Registro 3

Semelhante a um vetor gigante.


LDS

Linear Data Set

Não possui estrutura de registros.


Muito usado por:

  • DB2

  • sistemas internos IBM


Estrutura do KSDS

O tipo mais famoso.

ÍNDICE
   ↓
DADOS

Exemplo

000001 João
000002 Maria
000003 Carlos

Como o COBOL acessa VSAM?

Utilizando:

ORGANIZATION IS INDEXED

Exemplo ENVIRONMENT DIVISION

SELECT ARQCLI
       ASSIGN TO CLIENTE
       ORGANIZATION IS INDEXED
       ACCESS MODE IS DYNAMIC
       RECORD KEY IS CLI-CPF.

FILE SECTION

FD ARQCLI.

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

Operações básicas VSAM


OPEN

Abre arquivo.

OPEN I-O ARQCLI

READ

Lê registro.

READ ARQCLI

WRITE

Inclui registro.

WRITE REG-CLIENTE

REWRITE

Atualiza registro.

REWRITE REG-CLIENTE

DELETE

Exclui registro.

DELETE ARQCLI

START

Posiciona pela chave.

START ARQCLI
   KEY >= CLI-CPF

Exemplo de inclusão

MOVE 12345678901 TO CLI-CPF
MOVE 'BELLACOSA' TO CLI-NOME

WRITE REG-CLIENTE

Exemplo de consulta

MOVE 12345678901 TO CLI-CPF

READ ARQCLI
    INVALID KEY
       DISPLAY 'NAO ENCONTRADO'
END-READ

Exemplo de atualização

READ ARQCLI

MOVE 5000 TO CLI-SALDO

REWRITE REG-CLIENTE

Exemplo de exclusão

READ ARQCLI

DELETE ARQCLI

O que é RECORD KEY?

Campo que identifica unicamente o registro.


Exemplo

RECORD KEY IS CLI-CPF

O que é ALTERNATE INDEX?

Índice secundário.

Permite pesquisar por outro campo.


Exemplo

CPF
NOME
EMAIL

Pesquisar por:

  • CPF

  • NOME


Acesso Sequencial

ACCESS MODE IS SEQUENTIAL

Lê um após outro.


Acesso Aleatório

ACCESS MODE IS RANDOM

Lê diretamente pela chave.


Acesso Dinâmico

ACCESS MODE IS DYNAMIC

Combina os dois.


VSAM Online

Muito utilizado em:

  • CICS;

  • contas bancárias;

  • cartões;

  • PIX;

  • consulta saldo.


VSAM Batch

Usado em:

  • processamento noturno;

  • fechamento diário;

  • faturamento;

  • folha salarial.


Vantagens do VSAM

Acesso rápido


Atualização online


Pesquisa por chave


Índices automáticos


Excelente desempenho


Desvantagens

Administração mais complexa


Reorganizações periódicas


Mais complexo que QSAM


VSAM vs Arquivo Sequencial

CaracterísticaSequencialVSAM
ChaveNãoSim
ÍndiceNãoSim
Pesquisa rápidaNãoSim
Atualização diretaLimitadaSim
OnlinePouco comumMuito comum

Onde você encontra VSAM?

Praticamente em todos os grandes ambientes:

  • bancos;

  • seguradoras;

  • telecom;

  • governo;

  • cartões;

  • sistemas financeiros.


Curiosidades

1. VSAM existe desde os anos 70


2. Milhões de aplicações COBOL usam VSAM diariamente


3. Muitos caixas eletrônicos consultam VSAM em tempo real


4. Antes do DB2 dominar aplicações online, VSAM era a principal base de dados corporativa


Resumo rápido

ComandoFunção
OPENAbre VSAM
READConsulta
WRITEInclui
REWRITEAtualiza
DELETERemove
STARTPosiciona
KSDSChave indexada
ESDSSequencial
RRDSRelativo
LDSLinear

Conclusão

O VSAM é o principal método de armazenamento indexado do ambiente z/OS. Ele permite acesso rápido por chave, inclusão, atualização e exclusão de registros, sendo amplamente utilizado por programas COBOL em sistemas bancários, financeiros e governamentais executados em mainframes IBM Z.


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.


terça-feira, 6 de março de 2007

O que é o Comando ACCEPT em COBOL?

 

Bellacosa Mainframe e o comando accept no cobol

O que é o Comando ACCEPT em COBOL?

O comando ACCEPT é utilizado para:

receber dados de uma fonte externa e armazená-los em uma variável COBOL.

Na prática, ele funciona como uma operação de:

ENTRADA DE DADOS

É o oposto do comando:

DISPLAY

Enquanto o DISPLAY mostra informações, o ACCEPT recebe informações.


Analogia simples

Imagine um terminal 3270.

O usuário digita:

VAGNER

O COBOL precisa capturar esse valor.

Quem faz isso é o:

ACCEPT


Sintaxe básica

ACCEPT nome-do-campo

Exemplo simples

WORKING-STORAGE SECTION.

01 WS-NOME PIC X(30).

PROCEDURE DIVISION.

    DISPLAY 'DIGITE O NOME:'

    ACCEPT WS-NOME

    DISPLAY WS-NOME

    STOP RUN.

Resultado

DIGITE O NOME:
VAGNER

VAGNER

ACCEPT em programas interativos

Muito comum em:

  • TSO

  • Micro Focus COBOL

  • GnuCOBOL

  • ambientes de treinamento


Fluxo

DISPLAY
   ↓
USUÁRIO DIGITA
   ↓
ACCEPT
   ↓
PROCESSAMENTO

ACCEPT Numérico

01 WS-IDADE PIC 9(3).

ACCEPT WS-IDADE

Entrada:

25

Resultado:

WS-IDADE = 25

ACCEPT e Datas do Sistema

O ACCEPT também pode obter informações do sistema operacional.


Data atual

01 WS-DATA PIC 9(8).

ACCEPT WS-DATA FROM DATE

Resultado:

20260802

Formato:

AAAAMMDD

(depende do compilador)


Data Juliana

ACCEPT WS-DATA
       FROM DAY

Exemplo:

2026153

Ano + dia juliano.


Hora atual

01 WS-HORA PIC 9(8).

ACCEPT WS-HORA
       FROM TIME

Resultado:

14302599

Data e Hora

Alguns compiladores suportam:

ACCEPT WS-DATETIME
       FROM DATE YYYYMMDD

ACCEPT FROM DATE

Muito comum em batch.

ACCEPT WS-DATA-SISTEMA
       FROM DATE

ACCEPT FROM DAY

Retorna:

AAAA + DIA JULIANO

Exemplo

2 de junho de 2026:

2026153

ACCEPT FROM TIME

Retorna:

HHMMSSCC

Horas, minutos, segundos e centésimos.


Exemplo

15451035

ACCEPT em Mainframe Batch

No z/OS tradicional, ACCEPT de teclado é pouco utilizado.

Normalmente os dados vêm de:

  • arquivos;

  • parâmetros JCL;

  • SYSIN;

  • DB2;

  • VSAM.


Exemplo SYSIN

JCL:

//SYSIN DD *
VAGNER
/*

COBOL:

ACCEPT WS-NOME

ACCEPT e PARM do JCL

Muitas instalações utilizam:

//STEP1 EXEC PGM=PROG1,
 // PARM='PRODUCAO'

COBOL:

ACCEPT WS-PARM

ou

LINKAGE SECTION

dependendo do padrão adotado.


ACCEPT vs DISPLAY

DISPLAY:

DISPLAY 'OLA'

Mostra informação.


ACCEPT:

ACCEPT WS-NOME

Recebe informação.


Exemplo combinado

DISPLAY 'DIGITE O SALDO:'

ACCEPT WS-SALDO

DISPLAY WS-SALDO

Exemplo completo

IDENTIFICATION DIVISION.
PROGRAM-ID. TESTE.

DATA DIVISION.

WORKING-STORAGE SECTION.

01 WS-NOME PIC X(30).

PROCEDURE DIVISION.

    DISPLAY 'NOME: '

    ACCEPT WS-NOME

    DISPLAY 'VOCE DIGITOU: '
    DISPLAY WS-NOME

    STOP RUN.

Onde o ACCEPT é mais usado?

Ambientes educacionais


Micro Focus COBOL


GnuCOBOL


Aplicações de terminal


Captura de data/hora do sistema


Curiosidades

1. ACCEPT existe desde as primeiras versões do COBOL


2. Em z/OS batch seu uso é mais restrito


3. ACCEPT FROM DATE era muito usado antes das funções intrínsecas


4. Hoje muitos programadores preferem:

FUNCTION CURRENT-DATE

em vez de:

ACCEPT FROM DATE

ACCEPT vs FUNCTION CURRENT-DATE

Forma antiga:

ACCEPT WS-DATA
       FROM DATE

Forma moderna:

MOVE FUNCTION CURRENT-DATE
     TO WS-DATA

Resumo rápido

ComandoFunção
ACCEPTRecebe dados
ACCEPT FROM DATEData atual
ACCEPT FROM DAYData Juliana
ACCEPT FROM TIMEHora atual
DISPLAYExibe dados
CURRENT-DATEAlternativa moderna

Conclusão

O comando ACCEPT é a principal instrução de entrada de dados do COBOL. Ele permite receber informações digitadas pelo usuário ou obter dados do sistema, como data e hora, sendo um recurso clássico presente desde os primórdios da linguagem e ainda encontrado em aplicações COBOL executadas em ambientes IBM Z, Micro Focus e GnuCOBOL.

segunda-feira, 5 de março de 2007

O que é o Comando EVALUATE em COBOL?

 

Bellacosa Mainframe e o comando evaluate em cobol

O que é o Comando EVALUATE em COBOL?

O comando EVALUATE é uma das estruturas de decisão mais poderosas do COBOL.

Ele é equivalente ao:

  • CASE (C, Java, C#)

  • SWITCH (Java, JavaScript)

  • MATCH (algumas linguagens modernas)

Seu objetivo é:

executar diferentes ações dependendo do valor de uma variável ou condição.


Por que o EVALUATE existe?

Imagine um programa com vários IFs:

IF WS-OPCAO = 1
   PERFORM CONSULTA
ELSE
   IF WS-OPCAO = 2
      PERFORM INCLUSAO
   ELSE
      IF WS-OPCAO = 3
         PERFORM ALTERACAO
      END-IF
   END-IF
END-IF

Funciona, mas fica difícil de ler.

Com EVALUATE:

EVALUATE WS-OPCAO

   WHEN 1
      PERFORM CONSULTA

   WHEN 2
      PERFORM INCLUSAO

   WHEN 3
      PERFORM ALTERACAO

END-EVALUATE

Muito mais limpo.


Sintaxe básica

EVALUATE variável

   WHEN valor-1
      ação

   WHEN valor-2
      ação

   WHEN valor-3
      ação

END-EVALUATE

Exemplo simples

EVALUATE WS-NOTA

   WHEN 10
      DISPLAY 'EXCELENTE'

   WHEN 8
      DISPLAY 'MUITO BOM'

   WHEN 6
      DISPLAY 'APROVADO'

END-EVALUATE

WHEN OTHER

Funciona como:

DEFAULT
ELSE

Exemplo

EVALUATE WS-OPCAO

   WHEN 1
      DISPLAY 'CONSULTA'

   WHEN 2
      DISPLAY 'ALTERACAO'

   WHEN OTHER
      DISPLAY 'OPCAO INVALIDA'

END-EVALUATE

EVALUATE TRUE

Muito utilizado em sistemas corporativos.

Permite avaliar condições.


Exemplo

EVALUATE TRUE

   WHEN WS-SALDO > 10000
      DISPLAY 'CLIENTE VIP'

   WHEN WS-SALDO > 5000
      DISPLAY 'CLIENTE GOLD'

   WHEN OTHER
      DISPLAY 'CLIENTE NORMAL'

END-EVALUATE

Comparação com IF

IF:

IF WS-IDADE >= 18
   DISPLAY 'MAIOR'
ELSE
   DISPLAY 'MENOR'
END-IF

EVALUATE:

EVALUATE TRUE

   WHEN WS-IDADE >= 18
      DISPLAY 'MAIOR'

   WHEN OTHER
      DISPLAY 'MENOR'

END-EVALUATE

Avaliando faixas

EVALUATE TRUE

   WHEN WS-NOTA >= 9
      DISPLAY 'A'

   WHEN WS-NOTA >= 7
      DISPLAY 'B'

   WHEN WS-NOTA >= 5
      DISPLAY 'C'

   WHEN OTHER
      DISPLAY 'D'

END-EVALUATE

Avaliando múltiplos valores

EVALUATE WS-MES

   WHEN 1 2 3
      DISPLAY 'TRIMESTRE 1'

   WHEN 4 5 6
      DISPLAY 'TRIMESTRE 2'

   WHEN 7 8 9
      DISPLAY 'TRIMESTRE 3'

   WHEN 10 11 12
      DISPLAY 'TRIMESTRE 4'

END-EVALUATE

Avaliando múltiplas variáveis

Uma das características mais poderosas.

EVALUATE WS-TIPO ALSO WS-STATUS

   WHEN 'PF' ALSO 'A'
      DISPLAY 'PESSOA FISICA ATIVA'

   WHEN 'PJ' ALSO 'A'
      DISPLAY 'EMPRESA ATIVA'

   WHEN OTHER
      DISPLAY 'OUTRA SITUACAO'

END-EVALUATE

ALSO

Permite comparar vários campos simultaneamente.


Exemplo bancário

EVALUATE WS-CANAL ALSO WS-PRODUTO

   WHEN 'APP' ALSO 'PIX'
      PERFORM PROCESSA-PIX

   WHEN 'ATM' ALSO 'SAQUE'
      PERFORM PROCESSA-SAQUE

   WHEN OTHER
      PERFORM TRATA-ERRO

END-EVALUATE

Intervalos com THRU

EVALUATE WS-NOTA

   WHEN 0 THRU 4
      DISPLAY 'REPROVADO'

   WHEN 5 THRU 6
      DISPLAY 'RECUPERACAO'

   WHEN 7 THRU 10
      DISPLAY 'APROVADO'

END-EVALUATE

EVALUATE com LEVEL 88

Combinação muito elegante.

01 WS-STATUS PIC X.

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

   WHEN STATUS-OK
      DISPLAY 'SUCESSO'

   WHEN STATUS-ERRO
      DISPLAY 'FALHA'

END-EVALUATE

Vantagens do EVALUATE

Mais legível

Menos IF aninhado

Fácil manutenção

Excelente para regras de negócio

Melhor organização do código


Cuidados

  • A ordem dos WHEN é importante.

  • WHEN OTHER deve ficar por último.

  • Em EVALUATE TRUE, a primeira condição verdadeira é executada.


Onde é mais utilizado?

Praticamente em todos os sistemas COBOL modernos:

  • Bancos

  • Seguradoras

  • Cartões

  • PIX

  • Folha salarial

  • Processamento batch

  • CICS


Exemplo completo

WORKING-STORAGE SECTION.

01 WS-OPERACAO PIC 9.

PROCEDURE DIVISION.

    MOVE 2 TO WS-OPERACAO

    EVALUATE WS-OPERACAO

       WHEN 1
          DISPLAY 'CONSULTA'

       WHEN 2
          DISPLAY 'INCLUSAO'

       WHEN 3
          DISPLAY 'ALTERACAO'

       WHEN OTHER
          DISPLAY 'INVALIDO'

    END-EVALUATE

    STOP RUN.

Saída:

INCLUSAO

EVALUATE vs IF

IFEVALUATE
Bom para poucas condiçõesIdeal para muitas condições
Pode gerar IFs aninhadosCódigo mais limpo
Menos legível em regras complexasExcelente legibilidade
SimplesMais poderoso

Resumo rápido

ElementoFunção
EVALUATEEstrutura de decisão
WHENCondição
WHEN OTHERCaso padrão
ALSOMúltiplas variáveis
THRUIntervalo
EVALUATE TRUEAvaliação de expressões

Conclusão

O comando EVALUATE é a principal estrutura de decisão múltipla do COBOL. Ele substitui grandes blocos de IF aninhados, melhora a legibilidade do código e é amplamente utilizado em sistemas corporativos executados em mainframes IBM Z para implementar regras de negócio complexas de forma organizada e eficiente.


domingo, 4 de março de 2007

O que é o Comando MOVE em COBOL?

 

Bellacosa Mainframe e o comando move em cobol

O que é o Comando MOVE em COBOL?

O comando MOVE é um dos comandos mais utilizados em COBOL.

Sua função é simples:

copiar dados de um campo para outro.

Praticamente todo programa COBOL utiliza MOVE para:

  • transferir valores;

  • inicializar variáveis;

  • mover dados de arquivos;

  • preencher layouts;

  • preparar registros para gravação.


Sintaxe básica

MOVE origem TO destino

Exemplo simples

MOVE 100 TO WS-SALDO

Resultado:

WS-SALDO = 100

Movendo texto

MOVE 'BELLACOSA'
     TO WS-NOME

Resultado:

WS-NOME = BELLACOSA

Movendo entre variáveis

MOVE WS-SALDO-ATUAL
     TO WS-SALDO-ANTERIOR

Analogia simples

Imagine um operador copiando um documento de uma pasta para outra.

O MOVE faz exatamente isso:

ORIGEM
   ↓
DESTINO

Exemplo completo

WORKING-STORAGE SECTION.

01 WS-NOME     PIC X(20).
01 WS-CLIENTE  PIC X(20).

PROCEDURE DIVISION.

    MOVE 'VAGNER'
         TO WS-NOME

    MOVE WS-NOME
         TO WS-CLIENTE

    DISPLAY WS-CLIENTE

    STOP RUN.

Saída:

VAGNER

MOVE Numérico

MOVE 5000
     TO WS-SALARIO

MOVE Decimal

MOVE 1234.56
     TO WS-VALOR

MOVE entre formatos diferentes

COBOL realiza conversões automáticas em muitos casos.

Exemplo:

01 WS-TEXTO PIC X(5).
01 WS-NUM   PIC 9(5).

MOVE WS-NUM TO WS-TEXTO

MOVE para grupos

Uma característica poderosa do COBOL.

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

01 CLIENTE-BKP PIC X(23).
MOVE CLIENTE
     TO CLIENTE-BKP

Move toda a estrutura.


MOVE CORRESPONDING

Também chamado:

MOVE CORR

Move campos com o mesmo nome.


Exemplo

01 CLIENTE-A.
   05 NOME PIC X(20).
   05 IDADE PIC 9(3).

01 CLIENTE-B.
   05 NOME PIC X(20).
   05 IDADE PIC 9(3).
MOVE CORRESPONDING CLIENTE-A
                   TO CLIENTE-B

O que acontece?

NOME  → NOME
IDADE → IDADE

Automaticamente.


MOVE HIGH-VALUES

Preenche com o maior valor hexadecimal.

MOVE HIGH-VALUES
     TO WS-CAMPO

Muito usado em:

  • VSAM;

  • inicialização;

  • pesquisas.


MOVE LOW-VALUES

Preenche com o menor valor hexadecimal.

MOVE LOW-VALUES
     TO WS-CAMPO

MOVE SPACES

Preenche com espaços.

MOVE SPACES
     TO WS-NOME

Equivalente:

MOVE ' '
     TO WS-NOME

MOVE ZEROES

Preenche com zeros.

MOVE ZEROES
     TO WS-SALDO

MOVE ALL

Repete um valor.

MOVE ALL '*'
     TO WS-LINHA

Resultado:

********************

MOVE em arquivos

Muito usado antes do WRITE.

MOVE WS-NOME
     TO NOME-SAIDA

WRITE REG-SAIDA

MOVE em DB2

Muito usado para preencher host variables.

MOVE WS-CPF
     TO HV-CPF

MOVE em CICS

Também extremamente comum.

MOVE WS-MENSAGEM
     TO MSG-AREA

Cuidados com MOVE

Truncamento

Campo menor que origem.

Exemplo:

PIC X(5)

Recebendo:

BELLACOSA

Resultado:

BELLA

Perda de casas decimais

MOVE 123.99
     TO PIC 9(3)

Pode perder precisão.


Conversões inválidas

Mover texto para numérico pode gerar erro lógico.


MOVE vs COMPUTE

MOVE:

MOVE 100 TO WS-A

Apenas copia.


COMPUTE:

COMPUTE WS-A = 50 + 50

Calcula.


MOVE vs ADD

MOVE:

MOVE 100 TO WS-A

Substitui conteúdo.


ADD:

ADD 100 TO WS-A

Soma ao conteúdo existente.


Onde o MOVE é utilizado?

Praticamente em todos os programas COBOL:

  • Batch;

  • CICS;

  • DB2;

  • VSAM;

  • Arquivos QSAM;

  • APIs;

  • Processamento financeiro.


Curiosidades

1. MOVE é provavelmente o comando mais utilizado do COBOL

2. Alguns sistemas executam milhões de MOVEs por segundo

3. MOVE CORRESPONDING é muito usado em sistemas corporativos

4. Grande parte da integração entre layouts depende de MOVE


Resumo rápido

ComandoFunção
MOVECopia dados
MOVE CORRESPONDINGCopia campos iguais
MOVE SPACESPreenche espaços
MOVE ZEROESPreenche zeros
MOVE HIGH-VALUESMaior valor hexadecimal
MOVE LOW-VALUESMenor valor hexadecimal
MOVE ALLRepete conteúdo

Conclusão

O comando MOVE é a principal instrução de transferência de dados do COBOL. Ele permite copiar informações entre variáveis, registros e estruturas de forma simples, eficiente e segura, sendo um dos pilares de praticamente todos os sistemas executados em mainframes IBM Z.


sábado, 3 de março de 2007

O que são ADD, SUBTRACT, MULTIPLY e DIVIDE em COBOL?

 

Bellacosa Mainframe e os comandos de calculo no COBOL

O que são ADD, SUBTRACT, MULTIPLY e DIVIDE em COBOL?

Antes do comando COMPUTE se popularizar, os cálculos em COBOL eram realizados principalmente através de quatro verbos aritméticos clássicos:

  • ADD

  • SUBTRACT

  • MULTIPLY

  • DIVIDE

Esses comandos fazem parte do COBOL desde suas primeiras versões e continuam sendo amplamente utilizados em sistemas batch e online.


ADD

O comando ADD realiza:

soma de valores.


Sintaxe básica

ADD valor-1 TO valor-2

Exemplo:

ADD 100 TO WS-SALDO

Se WS-SALDO era:

500

Passará a ser:

600

Usando GIVING

ADD WS-A WS-B
    GIVING WS-TOTAL

Exemplo:

WS-A = 10
WS-B = 20

Resultado:

WS-TOTAL = 30

SUBTRACT

O comando SUBTRACT realiza:

subtração.


Sintaxe básica

SUBTRACT valor-1
    FROM valor-2

Exemplo:

SUBTRACT 100
    FROM WS-SALDO

Se WS-SALDO era:

500

Resultado:

400

Com GIVING

SUBTRACT WS-DESCONTO
    FROM WS-VALOR
    GIVING WS-LIQUIDO

MULTIPLY

O comando MULTIPLY realiza:

multiplicação.


Sintaxe básica

MULTIPLY valor-1
    BY valor-2

Exemplo:

MULTIPLY 10
    BY WS-TOTAL

Se WS-TOTAL era:

50

Resultado:

500

Com GIVING

MULTIPLY WS-QTD
    BY WS-PRECO
    GIVING WS-TOTAL

Exemplo

QTD   = 5
PRECO = 100

Resultado:

500

DIVIDE

O comando DIVIDE realiza:

divisão.


Sintaxe básica

DIVIDE valor-1
    INTO valor-2

Exemplo

DIVIDE 2
    INTO WS-TOTAL

Se WS-TOTAL era:

100

Resultado:

50

Forma mais usada

DIVIDE WS-SOMA
    BY WS-QTD
    GIVING WS-MEDIA

Exemplo

SOMA = 100
QTD  = 5

Resultado:

MEDIA = 20

ON SIZE ERROR

Todos os comandos matemáticos podem usar:

ON SIZE ERROR

Exemplo:

ADD WS-A TO WS-B

   ON SIZE ERROR
      DISPLAY 'ERRO'
END-ADD

END-ADD

COBOL moderno permite fechamento explícito.

ADD WS-A TO WS-B
END-ADD

END-SUBTRACT

SUBTRACT WS-A
    FROM WS-B
END-SUBTRACT

END-MULTIPLY

MULTIPLY WS-A
    BY WS-B
END-MULTIPLY

END-DIVIDE

DIVIDE WS-A
    INTO WS-B
END-DIVIDE

Exemplo completo

WORKING-STORAGE SECTION.

01 WS-SALARIO     PIC 9(7)V99.
01 WS-BONUS       PIC 9(5)V99.
01 WS-TOTAL       PIC 9(7)V99.

PROCEDURE DIVISION.

    MOVE 5000 TO WS-SALARIO
    MOVE 1000 TO WS-BONUS

    ADD WS-BONUS
        TO WS-SALARIO
        GIVING WS-TOTAL

    DISPLAY WS-TOTAL

    STOP RUN.

Resultado:

6000.00

Comparação com COMPUTE

ADD

ADD A TO B GIVING C

Equivalente:

COMPUTE C = A + B

SUBTRACT

SUBTRACT A FROM B
GIVING C

Equivalente:

COMPUTE C = B - A

MULTIPLY

MULTIPLY A BY B
GIVING C

Equivalente:

COMPUTE C = A * B

DIVIDE

DIVIDE A INTO B
GIVING C

Equivalente:

COMPUTE C = B / A

Quando usar ADD, SUBTRACT, MULTIPLY e DIVIDE?

Muitos sistemas legados COBOL utilizam esses comandos porque:

  • são extremamente claros;

  • seguem o padrão COBOL clássico;

  • facilitam manutenção de sistemas antigos.


Quando usar COMPUTE?

Quando a fórmula for mais complexa:

COMPUTE WS-TOTAL =
       (WS-A + WS-B)
       * WS-C
       / WS-D

Curiosidade

Durante décadas, praticamente todos os sistemas bancários COBOL foram escritos usando:

ADD
SUBTRACT
MULTIPLY
DIVIDE

O comando COMPUTE tornou-se popular posteriormente por deixar as fórmulas mais próximas da matemática tradicional.


Resumo rápido

ComandoFunção
ADDSoma
SUBTRACTSubtração
MULTIPLYMultiplicação
DIVIDEDivisão
GIVINGGuarda resultado
ON SIZE ERRORTrata estouro
COMPUTEFórmulas completas

Conclusão

ADD, SUBTRACT, MULTIPLY e DIVIDE são os verbos aritméticos clássicos do COBOL. Eles continuam presentes em milhões de linhas de código executadas diariamente em mainframes IBM Z, especialmente em aplicações financeiras, bancárias e de processamento batch.


sexta-feira, 2 de março de 2007

O que é o Comando COMPUTE em COBOL?

 

Bellacosa Mainframe e o comando compute no cobol

O que é o Comando COMPUTE em COBOL?

O comando COMPUTE é uma das instruções mais importantes do COBOL para realizar:

  • cálculos matemáticos;

  • fórmulas financeiras;

  • operações aritméticas;

  • expressões complexas.

Ele foi criado para simplificar operações que antes exigiam vários comandos separados.


O que faz o COMPUTE?

O COMPUTE permite:

calcular uma expressão matemática completa em uma única instrução.


Sintaxe básica

COMPUTE resultado = expressão

Exemplo:

COMPUTE WS-TOTAL = WS-VALOR1 + WS-VALOR2

Exemplo simples

Sem COMPUTE:

ADD WS-VALOR1 TO WS-VALOR2 GIVING WS-TOTAL

Com COMPUTE:

COMPUTE WS-TOTAL =
        WS-VALOR1 + WS-VALOR2

Operações suportadas

Soma

COMPUTE WS-TOTAL =
        WS-A + WS-B

Subtração

COMPUTE WS-SALDO =
        WS-CREDITO - WS-DEBITO

Multiplicação

COMPUTE WS-TOTAL =
        WS-QUANTIDADE * WS-PRECO

Divisão

COMPUTE WS-MEDIA =
        WS-SOMA / WS-QTD

Potência

COMPUTE WS-RESULTADO =
        WS-VALOR ** 2

Operadores matemáticos

OperadorSignificado
+Soma
-Subtração
*Multiplicação
/Divisão
**Potência

Exemplo de expressão complexa

COMPUTE WS-RESULTADO =
       (WS-A + WS-B)
       * WS-C
       / WS-D

Ordem de precedência

O COBOL segue regras matemáticas normais:

()
**
* /
+ -

Exemplo

COMPUTE WS-TOTAL =
        10 + 20 * 3

Resultado:

70

Porque:

20 * 3 = 60
60 + 10 = 70

Usando parênteses

COMPUTE WS-TOTAL =
       (10 + 20) * 3

Resultado:

90

COMPUTE com valores monetários

Muito comum em sistemas bancários.

COMPUTE WS-JUROS =
        WS-SALDO * WS-TAXA

Exemplo financeiro

COMPUTE WS-VALOR-FINAL =
        WS-VALOR +
        (WS-VALOR * WS-PERCENTUAL / 100)

COMPUTE com COMP-3

Extremamente comum.

01 WS-SALDO      PIC S9(7)V99 COMP-3.
01 WS-JUROS      PIC S9(5)V99 COMP-3.
01 WS-TOTAL      PIC S9(9)V99 COMP-3.

COMPUTE WS-TOTAL =
        WS-SALDO + WS-JUROS

COMPUTE e Funções Intrínsecas

Podem ser usados juntos.

Exemplo:

COMPUTE WS-RAIZ =
        FUNCTION SQRT(625)

Resultado:

25

Exemplo com ABS

COMPUTE WS-VALOR =
        FUNCTION ABS(-500)

Resultado:

500

COMPUTE com CURRENT-DATE

MOVE FUNCTION CURRENT-DATE
     TO WS-DATA

Embora CURRENT-DATE normalmente seja usado com MOVE, ele também pode participar de expressões.


ON SIZE ERROR

Muito importante.

Detecta estouro de campo.

Exemplo:

COMPUTE WS-TOTAL =
        WS-A * WS-B

   ON SIZE ERROR
      DISPLAY 'ERRO DE TAMANHO'
END-COMPUTE

O que é Size Error?

Quando o resultado não cabe no campo.

Exemplo:

Campo:

PIC 9(3)

Máximo:

999

Resultado calculado:

1500

Ocorre:

SIZE ERROR


Exemplo completo

WORKING-STORAGE SECTION.

01 WS-SALARIO      PIC 9(7)V99.
01 WS-BONUS        PIC 9(5)V99.
01 WS-TOTAL        PIC 9(7)V99.

PROCEDURE DIVISION.

    MOVE 5000 TO WS-SALARIO
    MOVE 1000 TO WS-BONUS

    COMPUTE WS-TOTAL =
            WS-SALARIO + WS-BONUS

    DISPLAY WS-TOTAL

    STOP RUN.

Saída:

6000.00

COMPUTE vs ADD

ADD:

ADD A TO B GIVING C

COMPUTE:

COMPUTE C = A + B

COMPUTE vs MULTIPLY

MULTIPLY:

MULTIPLY A BY B GIVING C

COMPUTE:

COMPUTE C = A * B

Vantagens do COMPUTE

Código mais legível

Menos instruções

Expressões complexas

Fácil manutenção

Mais próximo da matemática tradicional


Cuidados

  • Verificar tamanho dos campos.

  • Usar ON SIZE ERROR quando necessário.

  • Atenção com casas decimais.

  • Validar divisões por zero.


Onde o COMPUTE é mais usado?

Praticamente em todos os sistemas COBOL:

  • bancos;

  • cartões;

  • seguros;

  • folha salarial;

  • faturamento;

  • cálculo de juros;

  • cálculo de impostos.


Curiosidade

Antes do COMPUTE, muitos cálculos exigiam combinações de:

ADD
SUBTRACT
MULTIPLY
DIVIDE

O COMPUTE trouxe uma sintaxe muito mais próxima das fórmulas matemáticas tradicionais.


Resumo rápido

ComandoFunção
COMPUTEExecuta cálculos
+Soma
-Subtração
*Multiplicação
/Divisão
**Potência
ON SIZE ERRORTrata estouro
FUNCTIONUsa funções intrínsecas

Conclusão

O comando COMPUTE é a principal instrução de cálculo do COBOL. Ele permite executar operações matemáticas simples ou complexas de forma clara, legível e eficiente, sendo amplamente utilizado em aplicações financeiras e sistemas corporativos executados em mainframes IBM Z.