segunda-feira, 23 de fevereiro de 2026

📘 50 Erros que Você Pode Capturar com IF em JCL

 

Bellacosa Mainframe apresenta 50 erros em processo batch e maneira de capturar via if /cond

Controle Condicional de Verdade no z/OS

Por Vagner Bellacosa — El Jefe Midnight Lunch

Salve jovem padawan a vida no mundo batch não é facil. Pensando nisso, seus problemas acabaram, parcialmente, no artigo de hoje, fiz um apanhado, peguei um saco de gatos, misturei com aquele tempero nosso. Coloquei algumas dicas de amarração com return cond, conds e ifs. em resultado apresento a você

Se você ainda usa IF em JCL apenas para testar RC > 8, você está usando uma Ferrari para ir até a padaria da esquina.

O IF/THEN/ELSE/ENDIF no z/OS é uma das ferramentas mais poderosas do processamento batch moderno. Ele permite capturar desde simples return codes até falhas estruturais complexas dentro de procedures.

Neste artigo, vou listar 50 situações reais de produção que podem ser tratadas com IF em JCL — com explicação prática, mentalidade de produção e visão arquitetural.

Prepare o café ☕ — vamos para o campo de batalha.

Seus problemas acabaram



🧠 Primeiro: O que o IF consegue testar?

O IF pode avaliar:

  • Return codes (RC)

  • ABENDs

  • ABENDs específicos

  • Steps executados ou não

  • Steps dentro de procedures

  • Condições combinadas (AND / OR)

  • Variáveis simbólicas

  • Fluxos aninhados (nested IF)

Agora vamos aos 50 cenários.


🔴 PARTE 1 — ABENDs Específicos (Sistema)

Captura via:

IF ABENDCC = Sxxx THEN
  1. S806 — Programa não encontrado (STEPLIB incorreto)

  2. S0C7 — Erro numérico COBOL (Data exception)

  3. S0C4 — Violação de memória

  4. S0C1 — Instrução inválida

  5. S913 — Falha de autorização RACF

  6. S878 — Falta de memória virtual

  7. S80A — Falta de storage abaixo da linha

  8. S837 — Falta de espaço em disco

  9. S522 — Timeout de CPU

  10. Uxxxx — User abend específico da aplicação

Uso típico: gerar dump, enviar notificação, disparar rollback.


🔴 PARTE 2 — Qualquer ABEND

IF ABEND THEN
  1. Capturar qualquer falha anormal

  2. Acionar rotina de recovery

  3. Enviar alerta para operações

  4. Forçar rollback

  5. Gerar log especial

O IF permite separar erro técnico de erro lógico (RC alto).


🔴 PARTE 3 — RC de Step Específico

IF STEP1.RC NE 0 THEN
  1. RC diferente de zero

  2. RC maior que 4 (warning elevado)

  3. RC igual a 4 (tratamento especial de warning)

  4. RC igual a 8

  5. RC igual a 12

  6. RC maior que 16

  7. RC entre 4 e 8

  8. RC fora da faixa esperada

  9. RC crítico mas sem abend

  10. RC inesperado para aquele step

Permite tratamento diferenciado por programa.


🔴 PARTE 4 — RC Global (último step executado)

IF (RC > 8) THEN
  1. Falha acumulada

  2. Erro lógico geral

  3. Inconsistência de processamento

  4. Validação negativa

  5. Resultado parcial não aceitável

Esse é o controle clássico de continuidade de fluxo.


🔴 PARTE 5 — Step Não Executado

IF ¬STEP1.RUN THEN
  1. Step bypassado por COND

  2. Step ignorado por IF anterior

  3. Step pulado por restart

  4. Step cancelado por lógica condicional

  5. Step não iniciado por erro estrutural

Excelente para auditoria e rastreabilidade.


🔴 PARTE 6 — Step Executado

IF STEP1.RUN THEN
  1. Confirmar execução de etapa crítica

  2. Validar dependência

  3. Garantir execução de PROC

  4. Verificar step condicional

  5. Auditoria de fluxo

Muito usado em ambientes com compliance.


🔴 PARTE 7 — Condições Combinadas (AND)

IF (RC > 4 & RC < 16) THEN
  1. Intervalo de erro médio

  2. Dupla condição obrigatória

  3. RC alto e step executado

  4. Falha parcial e dependência satisfeita

  5. Tratamento gradual por severidade

Controle refinado de severidade.


🔴 PARTE 8 — Condições Alternativas (OR)

IF (RC = 8 | RC = 12) THEN
  1. Dois códigos críticos específicos

  2. Warning ou erro leve

  3. Dois tipos diferentes de inconsistência

  4. Cenários alternativos aceitáveis

  5. Multi-falhas com mesma ação corretiva

Permite lógica flexível sem duplicar código.


🔥 EXTRA — Dentro de Procedures

IF STEP1.PROCSTEP.RC > 8 THEN

Controle granular dentro de PROCs reutilizáveis.

Ambiente corporativo pesado usa isso diariamente.


⚠ Limitações Importantes

  1. IF não executa após S122 ou S222 (cancelamentos externos).

  2. IF não roda se COND no JOB já tiver terminado o job.

  3. Todo IF precisa de ENDIF.

  4. RC final do job pode ser afetado por JOBRC.


🏛 Quando Usar IF em vez de COND?

CenárioMelhor escolhaLógica simplesCONDLógica estruturadaIFMúltiplos cenáriosIFControle de variável simbólicaIFClareza e manutençãoIF


🎯 Conclusão

O IF no JCL não é apenas um detalhe sintático.

Ele é:

  • Arquitetura de controle

  • Ferramenta de resiliência

  • Mecanismo de tratamento de falha

  • Base para automação robusta

  • Ponte entre aplicação e scheduler

Quem domina IF domina o fluxo batch.

EXEC STEP 
    │
    ▼
  ABEND ?
    │
    ├── S122/S222 → STOP
    │
    └── Outro ABEND
         │
         ├── Próximo STEP tem COND=EVEN ? → EXECUTA
         └── Senão → FLUSH
   │
   ▼
COND no JOB ?
   │
   ├── Verdadeiro → STOP JOB
   └── Falso → Continua
   │   
   ▼
  IF ?
   │
   ├── Verdadeiro → Executa bloco
   └── Falso → ELSE ou FLUSH
   │
   ▼
COND no EXEC ?
   │
   ├── Verdadeiro → FLUSH STEP
   └── Falso → Executa STEP

E no mundo mainframe, quem domina o fluxo… domina a produção.

🧠 Visual Mental Simplificado

ABEND crítico?
   ↓
COND JOB?
   ↓
IF?
   ↓
COND EXEC?
   ↓
Executa ou FLUSH
Esses abends me deixam louco

https://www.linkedin.com/pulse/50-erros-que-voc%C3%AA-pode-capturar-com-em-jcl-vagner-bellacosa-zqm8f




Sem comentários:

Enviar um comentário