🧠 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
NEXT
pode 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
SET
pode ser usada para alocação dinâmica de memória (com ponteiro). -
Quando usada com
SET
, o parâmetroLENGTH
é obrigatório.
💡 Dicas
-
Utilize
NUMITEMS
para saber quantos registros existem na fila antes de iterar. -
Prefira
QUEUE('NOME')
para filas locais eSYSID('SYS')
se estiver acessando filas remotas. -
Use
QNAME
se 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
: áreaINTO
menor 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.