🧠 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
, ocorreLENGERR
e os dados são truncados. -
Se a fila estiver em uso por outra tarefa e
NOSUSPEND
for especificado, ocorreQBUSY
.
💡 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
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
.