| 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
| Comando | Função |
|---|---|
| EXEC SQL | Acesso DB2 |
| EXEC CICS | Acesso CICS |
| EXEC DLI | Acesso IMS |
| EXEC MQ | Acesso IBM MQ |
| END-EXEC | Finaliza instrução |
| SQLCA | Comunicação DB2 |
| SQLCODE | Retorno 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.