🧠 Explicação

O comando EXEC CICS WRITE grava um novo registro em um arquivo VSAM, tabela ou recurso acoplado em um sistema local ou remoto. Ele permite incluir registros em KSDS (chaveada), ESDS (sequencial), RRDS (registro relativo), ou tabelas em memória mantidas pelo CICS.
A gravação pode usar chave (RIDFLD), endereço (RBA/XRBA) ou número de registro relativo (RRN), dependendo do tipo de arquivo.

🔧 Usos mais comuns

  • Incluir um novo registro em arquivos KSDS ou ESDS.

  • Gravar dados em tabelas de dados (mantidas pelo CICS ou pelo usuário).

  • Obter o endereço (RBA/XRBA) automaticamente após a gravação.

  • Fazer inserções em massa com MASSINSERT para otimizar performance.

  • Escrever em arquivos locais ou remotos (via SYSID).

🧾 Sintaxe

EXEC CICS WRITE
     FILE('CLIENTES')
     FROM(AREA-DADOS)
     RIDFLD(CHAVE-CLI)
     LENGTH(100)
     KEYLENGTH(10)
END-EXEC.

Gravação em ESDS com retorno do RBA:

EXEC CICS WRITE
     FILE('LOGS')
     FROM(AREA-LOG)
     RIDFLD(RBA-FIELD)
     LENGTH(200)
     RBA
END-EXEC.

💻 Exemplo prático

 

MOVE '0001234567' TO CHAVE-CLI.
MOVE 'JOAO DA SILVA' TO NOME-CLI.

EXEC CICS WRITE
     FILE('CLIENTES')
     FROM(AREA-CLI)
     RIDFLD(CHAVE-CLI)
     LENGTH(80)
     KEYLENGTH(10)
END-EXEC.

IF EIBRESP = DFHRESP(DUPREC)
    DISPLAY 'Registro já existe com esta chave!'
END-IF.

📌 Regras

  • FROM deve conter a área de dados a ser gravada.

  • RIDFLD deve conter a chave (KSDS), o RBA (ESDS) ou RRN (RRDS).

  • LENGTH é obrigatório para registros de tamanho variável e para arquivos remotos.

  • KEYLENGTH é necessário com SYSID ou se o arquivo for KSDS.

  • Se a chave já existir, ocorre DUPREC.

  • WRITE grava sempre no fim do arquivo se o arquivo for ESDS.

  • Para uso com XRBA, o arquivo deve suportar endereçamento estendido.

💡 Dicas

  • Sempre trate a condição DUPREC para arquivos KSDS — evita abends indesejados.

  • Utilize MASSINSERT para ganhar performance em gravações contínuas.

  • Prefira gravar com RBA/XRBA apenas em ESDS, se realmente precisar controlar o posicionamento.

  • Evite WRITE com registros muito grandes sem verificar o espaço disponível — erro NOSPACE pode ocorrer.

  • Use SYNCPOINT após múltiplas gravações para garantir persistência dos dados.

🚨 Condições que podem ocorrer

  • DUPREC: chave duplicada (KSDS).

  • RECORDBUSY: outro processo está acessando o registro.

  • LENGERR: tamanho do registro inconsistente.

  • NOSPACE: falta de espaço no conjunto de dados.

  • NOTOPEN, FILENOTFOUND, DISABLED, IOERR, LOCKED, ILLOGIC: erros diversos de acesso ao arquivo.

  • INVREQ: parâmetros incompatíveis (ex: KEYLENGTH errado).

  • SYSIDERR: erro no acesso remoto.

  • NOTAUTH: permissão negada.

✅ Conclusão

EXEC CICS WRITE é o comando principal para inclusão de registros em arquivos VSAM e tabelas no CICS. Saber usar corretamente suas opções — RIDFLD, FROM, LENGTH, KEYLENGTH — garante uma gravação precisa, segura e eficiente. Para quem quer controle total dos dados e integridade nas transações, dominar o WRITE é obrigatório.