| 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
| SQLCODE | Significado |
|---|---|
| 0 | Sucesso |
| +100 | Registro não encontrado |
| -803 | Chave duplicada |
| -305 | Valor nulo |
| -911 | Deadlock |
| -904 | Recurso 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
| Comando | Função |
|---|---|
| SELECT | Consulta |
| INSERT | Inclusão |
| UPDATE | Alteração |
| DELETE | Exclusão |
| COMMIT | Confirma |
| ROLLBACK | Desfaz |
| CURSOR | Percorre linhas |
| FETCH | Lê linha |
| SQLCA | Retorno SQL |
| SQLCODE | Có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.
Sem comentários:
Enviar um comentário