🧠 Explicação
O comando EXEC CICS DELETE é utilizado para excluir registros de arquivos no CICS, como VSAM KSDS, RRDS ou tabelas mantidas na memória (CICS ou usuário). A exclusão pode ser feita por chave (RIDFLD), por chave genérica (GENERIC + KEYLENGTH) ou por endereço relativo (RBA ou RRN).
É possível também excluir um registro lido com READ UPDATE, usando o TOKEN correspondente.

Esse comando é threadsafe apenas em alguns contextos (ex.: arquivos VSAM locais com RLS ou via IPIC remoto).

🛠️ Usos mais comuns

  • Excluir um registro específico com base na chave primária (KSDS).

  • Remover um grupo de registros com chave genérica (GENERIC).

  • Deletar registros previamente lidos com READ UPDATE, usando o TOKEN.

  • Excluir registros de tabelas mantidas pelo CICS (ou pelo usuário).

🧾 Sintaxe

EXEC CICS DELETE
     FILE(nome-arquivo)
     [RIDFLD(campo-chave-ou-RBA-ou-RRN)]
     [GENERIC]
     [KEYLENGTH(tamanho-chave)]
     [RBA]
     [RRN]
     [NUMREC(num-registros)]
     [NOSUSPEND]
     [TOKEN(token-associado)]
     [SYSID(nome-sistema)]
END-EXEC.

💻 Exemplo prático em COBOL

01 ACCTNO    PIC X(10).
01 NUMDEL    PIC 9(4) COMP.
01 TAMCHAVE  PIC 9(4) COMP.

MOVE 5 TO TAMCHAVE.

EXEC CICS DELETE
     FILE('MASTVSAM')
     RIDFLD(ACCTNO)
     KEYLENGTH(TAMCHAVE)
     GENERIC
     NUMREC(NUMDEL)
END-EXEC.

Esse exemplo remove todos os registros do arquivo MASTVSAM cuja chave começa com o valor de ACCTNO (5 primeiros caracteres).

📜 Regras

  • Obrigatório especificar RIDFLD exceto se for exclusão de registro lido com READ UPDATE.

  • Use GENERIC apenas com KSDS, nunca com RRDS.

  • KEYLENGTH deve ser menor que o tamanho da chave do VSAM se GENERIC for usado.

  • Com RBA ou RRN, o RIDFLD deve estar em formato binário.

  • NUMREC retorna a quantidade de registros excluídos (KSDS).

  • NOSUSPEND evita espera por bloqueios, mas pode gerar RECORDBUSY.

  • TOKEN associa o DELETE ao registro lido em READ UPDATE/BROWSE.

💡 Dicas

  • Use GENERIC com cuidado para não consumir muitos locks.

  • Em arquivos RLS, evite DELETE em massa sem commit entre blocos.

  • Com READ UPDATE, prefira TOKEN ao RIDFLD para deletar o registro lido.

  • NOSUSPEND é útil para evitar que a tarefa fique aguardando se o registro estiver bloqueado, mas exige controle de erro com RECORDBUSY.

✅ Conclusão
O comando EXEC CICS DELETE é essencial para a manipulação de dados transacionais em CICS, permitindo a exclusão precisa ou em lote de registros de arquivos e tabelas. Com suas múltiplas opções, possibilita operações seguras, desde que respeitadas as regras de concorrência, lock e integridade. Um comando poderoso para gerenciar o ciclo de vida de registros no ambiente mainframe.