🧠 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
ouREADPREV
comUPDATE
.
🧾 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 umREAD
,READNEXT
ouREADPREV
comUPDATE
. -
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 comTOKEN
, 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 comUPDATE
. -
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 oREAD
e oREWRITE
. -
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
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.