🧠 Explicação
O comando EXEC CICS RETRIEVE
é utilizado para recuperar dados armazenados por um comando START, geralmente para passar informações entre tarefas no CICS. É o único meio de acessar os dados enviados por um EXEC CICS START
com parâmetros.
Se for usado com a opção WAIT
, o comando bloqueia a tarefa até que dados estejam disponíveis — o que pode gerar afinidades indesejadas em ambientes com roteamento dinâmico de transações.
🔧 Usos mais comuns
-
Receber dados passados por
START
. -
Processar transações agendadas com dados personalizados.
-
Recuperar múltiplos dados iniciados por START, em terminais ou tarefas não-terminal.
🧾 Sintaxe
EXEC CICS RETRIEVE
INTO(AREA-DADOS)
LENGTH(TAM-AREA)
END-EXEC.
ou
EXEC CICS RETRIEVE
SET(PONTEIRO)
LENGTH(TAM-AREA)
END-EXEC.
💻 Exemplo prático
EXEC CICS RETRIEVE
INTO(DADOS-ENTRADA)
LENGTH(TAM-DADOS)
END-EXEC.
DISPLAY 'DADOS RECEBIDOS: ' DADOS-ENTRADA
📌 Regras
-
Pode ser usado somente em tarefas iniciadas por
START
. -
O dado recuperado só pode ser lido uma vez por RETRIEVE.
-
Com terminais, é possível fazer múltiplos
RETRIEVE
seguidos, desde que existam dados pendentes. -
Se não houver mais dados para recuperar, ocorre a condição
ENDDATA
. -
Se os dados contiverem FMH (Function Management Headers), o campo
EIBFMH
será preenchido comX'FF'
.
⚙️ Opções disponíveis
-
INTO(data-area)
: Recebe os dados numa área definida pelo programador. -
SET(ptr-ref)
: Define um ponteiro para os dados (deve usar junto comLENGTH
). -
LENGTH(area)
: Especifica ou retorna o tamanho dos dados. -
QUEUE
,RTERMID
,RTRANSID
: Informações recuperadas do START original. -
WAIT
: Coloca a tarefa em espera até que dados estejam disponíveis (atenção com travamentos e afinidades).
🚨 Condições que podem ocorrer (HANDLE CONDITION)
-
ENDDATA
: Todos os dados já foram recuperados. -
LENGERR
: A área informada não é suficiente para os dados. -
INVREQ
: Uso incorreto do comando. -
IOERR
: Erro ao acessar a área de armazenamento temporário. -
ENVDEFERR
: Erro de ambiente ao tentar acessar a fila.
💡 Dicas
-
Use
RETRIEVE
no início da transação que foi iniciada porSTART
. -
Sempre trate a condição
ENDDATA
para evitar falhas inesperadas. -
Se estiver usando
SET
, garanta que a área será liberada após o uso. -
Evite
WAIT
em ambientes com roteamento dinâmico de transações. -
Combine com
ASSIGN STARTCODE
para validar se a tarefa foi iniciada por START ('S'
,'SD'
,'U'
).
✅ Conclusão
O EXEC CICS RETRIEVE
é essencial para programas que trabalham com agendamento de tarefas ou comunicação entre transações. Permite recuperar informações passadas por comandos START
com segurança, seja em ambientes com terminal ou não. Com uso correto de INTO
, SET
, e tratamento de condições como ENDDATA
, o comando torna-se uma ferramenta poderosa para controle e integração de fluxos no CICS.