🧠 Explicação

O comando EXEC CICS REWRITE é utilizado para atualizar um registro previamente lido de um arquivo. Ele sobrescreve o conteúdo do registro com novos dados. É obrigatório que o registro tenha sido lido antes com a opção UPDATE, garantindo o bloqueio adequado para atualização.

⚠️ Não se deve alterar a chave principal de um registro VSAM durante a regravação.

🔧 Usos mais comuns

  • Atualizar registros em arquivos VSAM após leitura com READ ... UPDATE.

  • Substituir o conteúdo de registros em tabelas mantidas pelo CICS.

  • Atualizar dados temporários após navegação com READNEXT ou READPREV com UPDATE.

🧾 Sintaxe

EXEC CICS REWRITE
     FROM(AREA-DADOS)
     FILE('ARQ001')
     LENGTH(TAMANHO)
END-EXEC.
EXEC CICS REWRITE
     FROM(AREA-DADOS)
     FILE('ARQ001')
     TOKEN(TK-ATUALIZACAO)
END-EXEC.

💻 Exemplo prático

EXEC CICS READ
     FILE('CLIENTES')
     INTO(WS-REG-CLI)
     RIDFLD(WS-CHAVE)
     UPDATE
END-EXEC.

MODIFY-FIELDS.

EXEC CICS REWRITE
     FROM(WS-REG-CLI)
     FILE('CLIENTES')
END-EXEC.

📌 Regras

  • O comando REWRITE só pode ser usado após um READ, READNEXT ou READPREV com UPDATE.

  • O campo chave não pode ser alterado em arquivos VSAM.

  • Em arquivos com registros de tamanho variável, a opção LENGTH deve ser fornecida com o valor correto.

  • O TOKEN deve ser usado quando a leitura anterior foi feita com TOKEN, principalmente no modo RLS.

⚙️ Opções disponíveis

  • FILE(nome): Nome do arquivo VSAM, BDAM ou tabela.

  • FROM(área): Área contendo os dados a serem gravados.

  • LENGTH(valor): Tamanho do registro a ser regravado (em bytes).

  • SYSID(nome): Sistema remoto, se aplicável.

  • TOKEN(área): Identificador da leitura anterior com UPDATE.

  • NOSUSPEND: Evita aguardar se o registro estiver bloqueado (RLS).

🚨 Condições que podem ocorrer (HANDLE CONDITION)

  • INVREQ: REWRITE sem leitura anterior com UPDATE.

  • LENGERR: Tamanho excede o permitido ou não informado corretamente.

  • NOTFND: Registro não encontrado ou foi excluído após leitura.

  • CHANGED: Outro processo modificou o registro após a leitura.

  • RECORDBUSY: Registro bloqueado por outra transação.

  • LOCKED: Registro mantido com bloqueio exclusivo.

  • NOSPACE: Falta de espaço para regravar (tabelas).

  • DUPREC: Violação de chave única em índice alternativo.

💡 Dicas

  • Sempre capture a condição CHANGED para identificar se o registro foi alterado entre o READ e o REWRITE.

  • Utilize TOKEN ao trabalhar com arquivos em modo RLS para garantir consistência.

  • Utilize NOSUSPEND com cautela. Pode causar falhas se o registro estiver travado.

Conclusão

EXEC CICS REWRITE é essencial para manter os dados atualizados em arquivos acessados por aplicações CICS. Seu uso correto exige que o registro tenha sido previamente lido com UPDATE, e o campo chave deve permanecer inalterado. Com atenção ao uso de TOKEN e LENGTH, esse comando garante atualizações consistentes e seguras nos dados da aplicação.