Calculando um Intervalo de Tempo

Esse exemplo de ESQL calcula o intervalo de tempo desde quando uma mensagem de entrada do WebSphere MQ é colocada na fila de entrada até o momento em que ela é processada no nó Compute atual.

(Quando você faz uma chamada para a função de data/hora CURRENT_, o valor retornado é idêntico ao valor retornado a outra chamada no mesmo nó. Isso assegura que você possa utilizar a função consistentemente dentro de um único nó.)

 CALL CopyMessageHeaders();
 Declare PutTime INTERVAL;

 SET PutTime = (CURRENT_GMTTIME - InputRoot.MQMD.PutTime) MINUTE TO SECOND;
 
 SET OutputRoot.XML.Test.PutTime = PutTime;

A mensagem de saída possui o formato (embora os valores reais sejam variados):

<Test>
 <PutTime>INTERVAL &apos;1:21.862&apos; MINUTE TO SECOND</PutTime>
</Test>

O trecho de código a seguir configura um cronômetro, a ser acionado após um intervalo especificado do início do processamento, para verificar se o processamento foi concluído. Se o processamento não tiver sido concluído dentro do tempo decorrido, o disparo do cronômetro pode, por exemplo, acionar algum processamento de recuperação.

O campo StartTime da mensagem de pedido de tempo limite está configurado para a hora atual, além do período de retardo permitido, que é definido por uma propriedade definida pelo usuário no fluxo. (A propriedade definida pelo usuário foi configurada como uma cadeia no formato "HH:MM:SS" pelo administrador).

DECLARE StartDelyIntervalStr EXTERNAL CHARACTER '01:15:05';

	CREATE PROCEDURE ValidateTimeoutRequest() BEGIN

		-- Configurar o tempo limite
		DECLARE timeoutStartTimeRef REFERENCE TO
          OutputRoot.XMLNSC.Envelope.Header.TimeoutRequest.StartTime;
		IF LASTMOVE(timeoutStartTimeRef)
			THEN
			-- Já configurado
		ELSE
			-- Configure-o a partir da UDP StartDelyIntervalStr
			DECLARE startAtTime TIME CURRENT_TIME
          + CAST(StartDelyIntervalStr AS INTERVAL HOUR TO SECOND);
						
			-- Converter "TIME 'hh.mm.ss.fff'" para o formato hh.mm.ss
       -- necessário no campo StartTime
			DECLARE startAtTimeStr CHAR;
			SET startAtTimeStr = startAtTime;
			SET startAtTimeStr = SUBSTRING(startAtTimeStr FROM 7 FOR  8);
			SET OutputRoot.XMLNSC.Envelope.Header.TimeoutRequest.StartTime
                            = startAtTimeStr;
		END IF;
	END;
Conceitos relacionados
Visão Geral de Fluxos de Mensagens
Visão Geral de Mapeamentos de Mensagens
Tarefas relacionadas
Desenvolvendo Fluxos de Mensagens
Desenvolvendo ESQL
Utilizando os Operadores Numéricos com Valores de Data/Hora
Referências relacionadas
Nós Internos
Referência de ESQL
Tipo de Dados ESQL INTERVAL
Operadores Numéricos ESQL
Regras para Precedência de Operadores ESQL
Função CAST
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ac16755_