🧠 Explicação
O comando EXEC CICS DELAY suspende o processamento da tarefa corrente por um intervalo de tempo especificado (FOR) ou até uma hora do dia (UNTIL). É utilizado para pausar a execução de uma transação sem finalizar a tarefa.

A pausa pode ser definida em horas, minutos, segundos ou milissegundos. A execução é retomada automaticamente após a expiração do tempo. É possível atribuir um identificador (REQID) à solicitação para que ela possa ser cancelada por outra transação usando o comando EXEC CICS CANCEL.

Este comando é thread-safe apenas quando o intervalo for zero.

🛠️ Usos mais comuns

  • Aguardar um tempo fixo antes de continuar o processamento.

  • Realizar retentativas após falhas temporárias (ex: aguardar liberação de recurso).

  • Sincronizar etapas em processamento batch ou online.

  • Criar tarefas temporizadas combinando com REQID e CANCEL.

🧾 Sintaxe

EXEC CICS DELAY
     [FOR [HOURS(n)] [MINUTES(n)] [SECONDS(n)] [MILLISECS(n)]]
     [UNTIL [HOURS(n)] [MINUTES(n)] [SECONDS(n)]]
     [INTERVAL(hhmmss)]
     [TIME(hhmmss)]
     [REQID(nome-identificador)]
END-EXEC.

💻 Exemplos práticos em COBOL

▶️ Exemplo 1: Aguardar 5 minutos

EXEC CICS DELAY
     FOR MINUTES(5)
END-EXEC.

▶️ Exemplo 2: Aguardar até 12h45

EXEC CICS DELAY
     TIME(124500)
     REQID('WAIT001')
END-EXEC.

▶️ Exemplo 3: Pausa de 15 segundos

EXEC CICS DELAY
     FOR SECONDS(15)
END-EXEC.

▶️ Exemplo 4: Aguardar 15.000 milissegundos com identificador

EXEC CICS DELAY
     FOR MILLISECS(15000)
     REQID('DELAYX15')
END-EXEC.

📋 Parâmetros principais

Parâmetro Tipo Descrição
FOR Composto Define duração da pausa. Pode usar HOURS, MINUTES, SECONDS e MILLISECS.
UNTIL Composto Define hora exata para retomar a tarefa.
INTERVAL Decimal compactado Pausa relativa no formato HHMMSS.
TIME Decimal compactado Hora absoluta no formato HHMMSS.
REQID X(8) Identificador da solicitação, usado em conjunto com CANCEL.

⚠️ Regras

  • O tempo de pausa mínimo reconhecido é 50 ms — abaixo disso, a tarefa é liberada imediatamente.

  • O intervalo é verificado a cada 250 ms, podendo haver leve variação na precisão.

  • Ao usar REQID, certifique-se de armazená-lo em lugar acessível, como fila TS, se desejar cancelamento por outra tarefa.

  • Um DELAY substitui qualquer POST anterior da mesma tarefa.

💡 Dicas

  • Combine DELAY + REQID + CANCEL para controle refinado entre transações.

  • Use MILLISECS para pausas curtas com precisão maior.

  • Prefira FOR com HOURS, MINUTES, SECONDS em vez de INTERVAL para maior clareza e compatibilidade com C.

  • Em C, evite INTERVAL e TIME se não tiver valores constantes — C não lida bem com decimal compactado.

✅ Conclusão
O comando EXEC CICS DELAY é útil para controlar pausas temporais dentro do fluxo de execução de uma transação. Ele permite aguardar um tempo definido com precisão e pode ser interrompido por outra tarefa, se configurado corretamente com REQID. Simples, mas poderoso, é ideal para sincronizações, controle de tempo e retentativas automatizadas.