Translate

sábado, 10 de março de 2007

O que são os Comandos EXEC e END-EXEC no COBOL?

 

Bellacosa Mainframe e os comandos EXEC e END-EXEC no cobol

O que são os Comandos EXEC e END-EXEC no COBOL?

Os comandos EXEC e END-EXEC são utilizados para delimitar instruções que não pertencem ao COBOL puro, mas sim a outros subsistemas integrados ao programa.

Eles funcionam como uma espécie de:

"porta de comunicação" entre o COBOL e outros ambientes.

Os mais comuns são:

  • CICS

  • DB2

  • SQL

  • IMS

  • MQ Series (IBM MQ)


Sintaxe básica

EXEC comando
END-EXEC

Ou:

EXEC subsistema
     instruções
END-EXEC

Por que existem?

O compilador COBOL não entende diretamente comandos SQL, CICS ou MQ.

Por isso, um pré-compilador analisa tudo que estiver entre:

EXEC

e

END-EXEC

e converte para chamadas que o COBOL consegue executar.


Fluxo simplificado

Programa COBOL
       ↓
Pré-compilador
       ↓
CICS / DB2 / MQ
       ↓
Programa objeto

EXEC CICS

Uma das utilizações mais famosas.

Permite acessar o ambiente CICS.


Exemplo

EXEC CICS
     SEND
     TEXT('OLA CLIENTE')
END-EXEC

O que acontece?

O CICS envia uma mensagem para a tela do usuário.


Outro exemplo CICS

EXEC CICS
     RETURN
END-EXEC

Retorna o controle ao CICS.


EXEC SQL

Utilizado para acessar bancos de dados DB2.


Exemplo

EXEC SQL

    SELECT NOME
      INTO :WS-NOME
      FROM CLIENTES
     WHERE CPF = :WS-CPF

END-EXEC

O que acontece?

O DB2 executa o SELECT e retorna os dados para a variável COBOL.


Exemplo INSERT

EXEC SQL

    INSERT INTO CLIENTES
           (CPF,NOME)
    VALUES
           (:WS-CPF,
            :WS-NOME)

END-EXEC

Exemplo UPDATE

EXEC SQL

   UPDATE CLIENTES
      SET SALDO = :WS-SALDO
    WHERE CPF   = :WS-CPF

END-EXEC

Exemplo DELETE

EXEC SQL

   DELETE
     FROM CLIENTES
    WHERE CPF = :WS-CPF

END-EXEC

Host Variables

Observe os dois pontos:

:WS-NOME

Essas são:

Host Variables

Variáveis COBOL usadas pelo DB2.


EXEC SQL INCLUDE

Muito comum.

EXEC SQL
    INCLUDE SQLCA
END-EXEC

O que é SQLCA?

Área de comunicação entre:

COBOL
   ↔
DB2

Exemplo SQLCODE

IF SQLCODE = 0

Consulta realizada com sucesso.


EXEC IMS

Usado em aplicações IMS.


Exemplo:

EXEC DLI
     GU
END-EXEC

EXEC MQ

Utilizado para IBM MQ.


Exemplo

EXEC MQPUT
END-EXEC

ou

EXEC MQGET
END-EXEC

END-EXEC

Marca o fim do comando especial.


Exemplo

EXEC SQL
    COMMIT
END-EXEC

Sem END-EXEC o compilador não sabe onde termina a instrução.


Antigamente

Versões antigas utilizavam:

EXEC SQL
   SELECT ...

com ponto final.

Hoje o padrão é:

END-EXEC

Exemplo completo DB2

WORKING-STORAGE SECTION.

01 WS-NOME PIC X(30).

EXEC SQL
   INCLUDE SQLCA
END-EXEC.

PROCEDURE DIVISION.

EXEC SQL

   SELECT NOME
      INTO :WS-NOME
      FROM CLIENTES
     WHERE CPF = '12345678901'

END-EXEC

DISPLAY WS-NOME

Exemplo completo CICS

EXEC CICS
     RECEIVE MAP('TELA1')
END-EXEC

Recebe dados digitados pelo usuário.


EXEC CICS
     SEND MAP('TELA2')
END-EXEC

Envia dados para tela.


O que o compilador faz?

Durante a compilação:

EXEC SQL

não é executado diretamente.

Primeiro ocorre:

Pré-compilação DB2

Depois:

Compilação COBOL

Fluxo DB2

Fonte COBOL
     ↓
Pré-compilador SQL
     ↓
Fonte COBOL expandido
     ↓
Compilador COBOL
     ↓
Link Edit

Onde mais aparece?

CICS

EXEC CICS

DB2

EXEC SQL

IMS

EXEC DLI

MQ

EXEC MQ

Curiosidades

1. EXEC SQL é provavelmente a forma mais usada de EXEC no mundo Mainframe


2. Todo programa COBOL/DB2 passa por pré-compilação


3. EXEC CICS é a base das aplicações online bancárias


4. Milhões de transações por segundo utilizam EXEC CICS e EXEC SQL


Erros comuns de iniciantes

Esquecer END-EXEC


Não incluir SQLCA


Não declarar host variables


Confundir SQLCODE com RETURN-CODE


Resumo rápido

ComandoFunção
EXEC SQLAcesso DB2
EXEC CICSAcesso CICS
EXEC DLIAcesso IMS
EXEC MQAcesso IBM MQ
END-EXECFinaliza instrução
SQLCAComunicação DB2
SQLCODERetorno SQL

Conclusão

Os comandos EXEC e END-EXEC são delimitadores utilizados para integrar programas COBOL com subsistemas do Mainframe, como CICS, DB2, IMS e IBM MQ. Eles permitem que o COBOL execute comandos externos especializados, tornando possível criar aplicações online, acessar bancos de dados e integrar sistemas corporativos executados no ambiente IBM Z.


sexta-feira, 9 de março de 2007

O que é RETURN-CODE em COBOL?

 

Bellacosa Mainframe e o return-code no Cobol

O que é RETURN-CODE em COBOL?

O RETURN-CODE é uma variável especial utilizada para informar ao sistema operacional, ao JCL e aos schedulers o resultado da execução de um programa.

Em outras palavras:

é o código de retorno que o programa devolve ao z/OS quando termina.


Para que serve?

O RETURN-CODE informa se o programa:

  • executou com sucesso;

  • terminou com avisos;

  • encontrou erros;

  • deve interromper o fluxo do JOB.


Fluxo simplificado

PROGRAMA COBOL
       ↓
RETURN-CODE
       ↓
STEP JCL
       ↓
JES2
       ↓
Scheduler (IWS, Control-M, OPC)

Exemplo mais simples

MOVE 0 TO RETURN-CODE

Significa:

Execução OK

Valores mais comuns

Return CodeSignificado
0Sucesso
4Aviso
8Erro
12Erro grave
16Erro crítico

Exemplo

IF WS-ARQUIVO-VAZIO
   MOVE 4 TO RETURN-CODE
END-IF

Resultado:

Job terminou com Warning

Exemplo de erro

IF WS-ERRO-LEITURA
   MOVE 8 TO RETURN-CODE
END-IF

Onde o RETURN-CODE fica?

O compilador COBOL fornece automaticamente a variável especial:

RETURN-CODE

Não precisa ser declarada.


Exemplo completo

IDENTIFICATION DIVISION.
PROGRAM-ID. TESTE.

PROCEDURE DIVISION.

    DISPLAY 'PROCESSAMENTO OK'

    MOVE 0 TO RETURN-CODE

    GOBACK.

Como aparece no JCL?

Após o STEP terminar:

COND CODE 0000

ou

CC 0000

Exemplo com erro

MOVE 8 TO RETURN-CODE

No spool:

COND CODE 0008

Uso em Scheduler

Ferramentas como:

  • IBM IWS (Tivoli Workload Scheduler)

  • OPC

  • Control-M

  • CA-7

  • ESP

avaliam o Return Code.


Exemplo

RC = 0000

Próximo JOB é liberado.


RC = 0008

Fluxo interrompido.


Uso com COND no JCL

//STEP2 EXEC PGM=RELATORIO,
// COND=(8,LT)

Significa:

Se RC anterior < 8
execute o STEP

Uso com IF no JCL

Mais moderno.

// IF (STEP1.RC = 0) THEN
//STEP2 EXEC PGM=PROG2
// ENDIF

Exemplo prático

Processamento de clientes.

IF QTDE-CLIENTES = ZERO
   MOVE 4 TO RETURN-CODE
END-IF

Resultado:

Nenhum cliente processado

Mas sem ABEND.


Return Code não é ABEND

Muitos iniciantes confundem.


RETURN-CODE

Programa terminou normalmente.

RC=8

ABEND

Programa terminou anormalmente.

S0C7
S0C4
U4038

Comparação

SituaçãoResultado
MOVE 8 TO RETURN-CODETérmino normal
S0C7ABEND
S0C4ABEND
U0001ABEND usuário

RETURN-CODE em Subprogramas

Pode ser utilizado antes do:

GOBACK

Exemplo

IF ERRO
   MOVE 12 TO RETURN-CODE
END-IF

GOBACK

RETURN-CODE x GOBACK

MOVE 8 TO RETURN-CODE
GOBACK

O sistema recebe:

RC=8

RETURN-CODE x STOP RUN

Também funciona.

MOVE 0 TO RETURN-CODE
STOP RUN

Convenções corporativas

Muitas empresas adotam padrões:

RCSignificado
0OK
4Warning
8Erro funcional
12Erro grave
16Erro fatal

Exemplo bancário

EVALUATE TRUE

   WHEN ARQUIVO-VAZIO
      MOVE 4 TO RETURN-CODE

   WHEN REGISTRO-INVALIDO
      MOVE 8 TO RETURN-CODE

   WHEN ERRO-BANCO-DADOS
      MOVE 12 TO RETURN-CODE

END-EVALUATE

Como visualizar?

No SDSF:

ST

ou

H

Exemplo:

JOB12345 ENDED RC=0000

ou

JOB12345 ENDED RC=0008

Curiosidades

1. RETURN-CODE existe há décadas no COBOL


2. É fundamental para automação batch


3. Schedulers dependem fortemente dele


4. Grandes bancos possuem tabelas corporativas de RCs padronizados


Erros comuns de iniciantes

Esquecer de definir RETURN-CODE


Retornar sempre zero


Confundir RC com ABEND


Não documentar significado dos RCs


Resumo rápido

ComandoFunção
RETURN-CODECódigo de retorno
RC=0Sucesso
RC=4Aviso
RC=8Erro
RC=12Erro grave
RC=16Erro crítico
GOBACKRetorna ao chamador
STOP RUNFinaliza programa

Conclusão

O RETURN-CODE é o mecanismo utilizado pelos programas COBOL para informar ao z/OS, ao JES2, ao JCL e aos schedulers o resultado da execução. Ele é essencial para o controle de fluxos batch, automação corporativa e monitoramento de processos em ambientes Mainframe IBM Z.


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.