🧠 Explicação

O comando EXEC CICS READQ TD é utilizado para ler registros de uma fila de dados temporários (TD Queue) definida no CICS. Ele remove o registro da fila após a leitura — ou seja, a leitura é destrutiva. Pode ser aplicado tanto em filas intrapartição (acesso local) quanto extrapartição (comunicação externa).

🔧 Usos mais comuns

  • Processar mensagens de uma fila de comunicação interna do sistema.

  • Consumir dados produzidos por outras tarefas (ex: logs, ATI).

  • Implementar buffers de mensagens em aplicações CICS.

🧾 Sintaxe

EXEC CICS READQ TD
     QUEUE(nome-fila)
     INTO(area-destino)
     LENGTH(tam-dado)
     [NOSUSPEND]
     [SYSID(nome-sistema)]
     [SET(ponteiro)]
END-EXEC.

💻 Exemplo prático

* Leitura da fila interna de mensagens do sistema
EXEC CICS READQ TD
     QUEUE('CSML')
     INTO(MENSAGEM)
     LENGTH(TAM-MENSAGEM)
END-EXEC.

IF EIBRESP = DFHRESP(QZERO)
    DISPLAY 'Fila vazia. Nada a processar.'.
END-IF.

📌 Regras

  • READQ TD remove o registro da fila após a leitura (não há reprocessamento).

  • É necessário garantir que a área especificada em INTO seja grande o suficiente.

  • O campo LENGTH define o tamanho máximo que será lido e será atualizado com o tamanho real lido.

  • Se o registro da fila for maior que o valor informado em LENGTH, ocorre LENGERR e os dados são truncados.

  • Se a fila estiver em uso por outra tarefa e NOSUSPEND for especificado, ocorre QBUSY.

💡 Dicas

  • Ao utilizar ATI (iniciação automática de transação), teste a condição QZERO para garantir que a fila esteja realmente vazia antes de terminar a tarefa.

  • Use a opção SET(ptr-ref) quando quiser que o CICS aloque dinamicamente a área de memória para o dado lido.

  • Combine com o comando WRITEQ TD para criar processos assíncronos entre transações.

🚨 Condições que podem ocorrer

  • QZERO: Fila vazia.

  • QBUSY: Fila em uso (quando há outra tarefa escrevendo).

  • INVREQ, LENGERR, NOTAUTH, QIDERR, DISABLED, NOTOPEN: Erros de configuração ou permissões.

  • SYSIDERR: Problema ao acessar a fila em sistema remoto.

Conclusão

READQ TD é um comando fundamental para consumir dados de filas transitórias no ambiente CICS. Seja para ler mensagens, logs ou instruções pendentes entre transações, ele permite uma abordagem assíncrona eficiente, com tratamento robusto de erros e opções flexíveis como NOSUSPEND e SET.