Translate

Mostrar mensagens com a etiqueta PSB. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta PSB. Mostrar todas as mensagens

quinta-feira, 28 de maio de 2026

☕🔥💣 LABORATÓRIO IMS DL/I: CRIANDO UM BANCO HIERÁRQUICO NA PRÁTICA

 

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:

TipoFunção
ROOTtopo da árvore
CHILDfilho
DEPENDENTdependente

No nosso caso:

SegmentoTipo
CURSOROOT
ALUNOCHILD
NOTACHILD 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:

PROCOPTFunção
Gread
Aall
Iinsert
Ddelete

☕ 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:

ComandoFunção
GUbusca específica
GNpróximo
GNPpró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.