| Bellacosa Mainframe lahoratorio pratico de ims dl/i crie seu banco de dados hierarquico |
☕🔥💣 LABORATÓRIO IMS DL/I: CRIANDO UM BANCO HIERÁRQUICO NA PRÁTICA
Como construir um banco IMS para CURSOS, ALUNOS e NOTAS — passo a passo para programadores COBOL iniciantes
Se você veio do mundo:
DB2
Oracle
SQL Server
MySQL
prepare-se.
Porque no IMS o mundo funciona de maneira MUITO diferente. 😄
Aqui não existem:
❌ tabelas tradicionais
❌ SELECT com JOIN
❌ modelagem relacional clássica
No IMS nós pensamos em:
🌳 HIERARQUIA
E quando você entende isso…
o “dinossauro” começa a fazer sentido.
🚀 Objetivo do Laboratório
Vamos criar um banco IMS para armazenar:
cursos
alunos
notas
Nossa estrutura será:
CURSO
└── ALUNO
└── NOTA
Exemplo:
COBOL
└── JOAO
└── 9.5
🌳 Entendendo a Hierarquia
No IMS existe:
| Tipo | Função |
|---|---|
| ROOT | topo da árvore |
| CHILD | filho |
| DEPENDENT | dependente |
No nosso caso:
| Segmento | Tipo |
|---|---|
| CURSO | ROOT |
| ALUNO | CHILD |
| NOTA | CHILD do ALUNO |
💾 Estrutura Física Mental
Fisicamente o IMS gravará algo parecido com:
CURSO
↓ ponteiro
ALUNO
↓ ponteiro
NOTA
O IMS literalmente conecta segmentos usando ponteiros físicos.
☕ Etapa 1 — Criando o DBD
O:
DBD
(Database Description)
define a estrutura do banco.
📦 DBD Básico
DBD NAME=ESCOLA,ACCESS=HIDAM
DATASET DD1=ESCOLADB
SEGM NAME=CURSO,BYTES=50,PARENT=0
FIELD NAME=(CODCURSO,SEQ,U),BYTES=5,START=1
SEGM NAME=ALUNO,BYTES=80,PARENT=CURSO
FIELD NAME=(MATRIC,SEQ,U),BYTES=6,START=1
SEGM NAME=NOTA,BYTES=20,PARENT=ALUNO
FIELD NAME=(IDNOTA,SEQ,U),BYTES=4,START=1
DBDGEN
FINISH
END
🧠 O Que Está Acontecendo?
🌳 CURSO
Segmento ROOT.
Topo da árvore.
👨🎓 ALUNO
Filho de CURSO.
📊 NOTA
Filho de ALUNO.
🚀 ACCESS=HIDAM
Define tipo do banco.
HIDAM:
✅ rápido
✅ indexado
✅ muito usado em IMS clássico
☕ Etapa 2 — Gerando o DBD
Agora precisamos gerar o banco.
Usamos JCL.
📜 JCL DBDGEN
//DBDGEN EXEC PGM=ASMA90
//SYSIN DD *
DBD ...
/*
Depois fazemos:
DBDGEN
para criar o módulo do banco.
🚀 Etapa 3 — Criando o PSB
O:
PSB
(Program Specification Block)
define como programas acessam o banco.
📦 Exemplo PSB
PSBGEN PSBNAME=PSBESC
PCB TYPE=DB,DBDNAME=ESCOLA,PROCOPT=G
SENSEG NAME=CURSO
SENSEG NAME=ALUNO,PARENT=CURSO
SENSEG NAME=NOTA,PARENT=ALUNO
END
🧠 PROCOPT=G
Permite:
GET
Somente leitura.
Depois podemos usar:
| PROCOPT | Função |
|---|---|
| G | read |
| A | all |
| I | insert |
| D | delete |
☕ Etapa 4 — ACBGEN
Depois geramos:
ACB
O famoso:
Application Control Block
📜 JCL ACBGEN
//ACBGEN EXEC PGM=DFSRRC00
🚀 Etapa 5 — Inicializando Banco
Criamos datasets IMS.
Normalmente usando:
IDCAMS
VSAM
utilities IMS
📦 Exemplo IDCAMS
//IDCAMS EXEC PGM=IDCAMS
DEFINE CLUSTER -
(NAME(ESCOLADB))
☕ Etapa 6 — Inserindo Dados
Agora vem a parte divertida. 😄
👨💻 Programa COBOL IMS
CALL 'CBLTDLI'
USING 'ISRT'
DB-PCB
CURSO-AREA
🌳 ISRT
Significa:
INSERT SEGMENT
📦 Inserindo CURSO
CURSO = COBOL
👨🎓 Inserindo ALUNO
Depois navegamos:
CURSO → ALUNO
📊 Inserindo NOTA
Depois:
ALUNO → NOTA
🚀 Estrutura Final
COBOL
└── JOAO
└── 9.5
COBOL
└── MARIA
└── 8.7
☕ Etapa 7 — Consultando Dados
Agora usamos:
GU
(Get Unique)
📦 Exemplo
CALL 'CBLTDLI'
USING 'GU '
DB-PCB
AREA
SSA.
🔑 SSA
Segment Search Argument.
Exemplo:
CURSO(CODCURSO=COBOL)
🚀 Navegando Pela Árvore
Agora usamos:
| Comando | Função |
|---|---|
| GU | busca específica |
| GN | próximo |
| GNP | próximo filho |
🌳 Exemplo Navegação
GU CURSO
GN ALUNO
GNP NOTA
☕ Etapa 8 — Atualizando Nota
Usamos:
REPL
(Replace)
📦 Fluxo
1️⃣ GU NOTA
2️⃣ altera AREA
3️⃣ REPL
☕ Etapa 9 — Deletando Registro
Usamos:
DLET
📦 Exemplo
CALL 'CBLTDLI'
USING 'DLET'
DB-PCB
🚀 O Que o Programador Junior Precisa Entender
No IMS:
⚡ você NÃO pensa em tabela.
Você pensa em:
✅ árvore
✅ caminho
✅ navegação
✅ pai-filho
✅ segmentos
⚔️ Diferença Mental DB2 vs IMS
🟦 DB2
Você pergunta:
SELECT *
🌳 IMS
Você navega:
ROOT → CHILD → CHILD
☕ Curiosidade Bellacosa Mainframe
O IMS nasceu em:
🚀 1968
para ajudar a NASA no projeto Apollo.
Décadas depois…
a mesma lógica hierárquica ainda processa:
💳 cartões
🏦 bancos
📱 mobile banking
✈️ companhias aéreas
📡 telecom
O “dinossauro” continua vivo.
E absurdamente rápido.
Sem comentários:
Enviar um comentário