🧠 Explicação
O comando EXEC CICS READQ TS é utilizado para ler registros de uma fila de armazenamento temporário (TS Queue). Diferente das filas TD, as filas TS não perdem o dado após a leitura — ou seja, a leitura não é destrutiva. Os dados podem estar armazenados na memória principal ou em disco auxiliar.
🔧 Usos mais comuns
-
Compartilhar dados entre diferentes transações dentro do CICS.
-
Armazenar estruturas temporárias, listas ou buffers reutilizáveis.
-
Implementar mecanismos de leitura sequencial ou por índice (ITEM).
🧾 Sintaxe
EXEC CICS READQ TS
QUEUE(nome-fila)
ITEM(numero-item)
INTO(area-dados)
LENGTH(tamanho)
END-EXEC.
Ou, para leitura sequencial:
EXEC CICS READQ TS
QUEUE(nome-fila)
NEXT
SET(ponteiro)
LENGTH(tamanho)
END-EXEC.
💻 Exemplo prático
EXEC CICS READQ TS
ITEM(1)
QUEUE('MINHAFILA')
INTO(MINHA-AREA)
LENGTH(LEN-AREA)
END-EXEC.
IF EIBRESP = DFHRESP(ITEMERR)
DISPLAY 'Item não encontrado.'.
END-IF.
📌 Regras
-
A leitura pode ser feita por índice (
ITEM) ou sequencialmente (NEXT). -
O comando não remove o item da fila, diferente do
READQ TD. -
A fila deve ter sido previamente preenchida com
WRITEQ TS. -
A leitura sequencial com
NEXTpode se intercalar entre tarefas se não houver controle — isso exige lógica de serialização se a ordem for crítica. -
A opção
SETpode ser usada para alocação dinâmica de memória (com ponteiro). -
Quando usada com
SET, o parâmetroLENGTHé obrigatório.
💡 Dicas
-
Utilize
NUMITEMSpara saber quantos registros existem na fila antes de iterar. -
Prefira
QUEUE('NOME')para filas locais eSYSID('SYS')se estiver acessando filas remotas. -
Use
QNAMEse precisar de nomes de fila com até 16 caracteres (substituiQUEUE).
🚨 Condições que podem ocorrer
-
ITEMERR: item não existe na fila. -
QIDERR: nome de fila inválido ou não encontrado. -
LENGERR: áreaINTOmenor que o tamanho do registro. -
SYSIDERR: erro ao acessar fila remota. -
INVREQ,NOTAUTH,IOERR: erros operacionais ou de autorização.
✅ Conclusão
O READQ TS é uma ferramenta poderosa para leitura de dados armazenados temporariamente no CICS. Sua natureza não destrutiva o torna ideal para compartilhamento e reuso de dados entre programas. Ele oferece flexibilidade de leitura direta ou sequencial, com suporte a filas locais, remotas ou compartilhadas.