Calcular un intervalo de tiempo

Este ejemplo ESQL calcula el intervalo de tiempo entre un mensaje WebSphere MQ de entrada que se coloca en la cola de entrada y la hora en que se procesa en el nodo Compute actual.

(Cuando efectúa una llamada a una función CURRENT_ datetime, el valor que se devuelve es idéntico al valor que devuelve otra llamada del mismo nodo. Esto garantiza que puede utilizar la función de forma coherente en un solo nodo.)

 CALL CopyMessageHeaders();
 Declare PutTime INTERVAL;

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

El mensaje de salida tiene el formato (aunque los valores reales varían):

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

La siguiente sección de código establece un temporizador, que se debe desencadenar después de un intervalo especificado a partir del inicio del proceso, a fin de comprobar que el proceso se ha completado. Si el proceso no se ha completado una vez que ha transcurrido el tiempo, es posible que la activación del temporizador desencadene, por ejemplo, algún proceso de recuperación.

El campo StartTime del mensaje de petición de tiempo de espera se establece en la hora actual más el periodo de retardo permitido, definido por una propiedad definida por el usuario en el flujo. (El administrador ha establecido la propiedad definida por el usuario en una serie de caracteres con el formato "HH:MM:SS".)

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

	CREATE PROCEDURE ValidateTimeoutRequest() BEGIN

		-- Establecer el periodo de tiempo de espera
		DECLARE timeoutStartTimeRef REFERENCE TO OutputRoot.XMLNSC.Envelope.Header.TimeoutRequest.StartTime;
		IF LASTMOVE(timeoutStartTimeRef)
			THEN
			-- Ya establecido
		ELSE
			-- Establecerlo a partir de UDP StartDelyIntervalStr 
			DECLARE startAtTime TIME CURRENT_TIME + CAST(StartDelyIntervalStr AS INTERVAL HOUR TO SECOND)  ;
-- Convertir "TIME 'hh.mm.ss.fff'" en el formato hh.mm.ss 
       -- necesario en el 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;
Conceptos relacionados
Visión general de flujos de mensajes
Visión general de las correlaciones de mensajes
Tareas relacionadas
Desarrollar flujos de mensajes
Desarrollo de ESQL
Utilizar operadores numéricos con valores de fecha y hora
Referencia relacionada
Nodos incorporados
Referencia de ESQL
Tipo de datos INTERVAL (intervalo) ESQL
Operadores ESQL numéricos
Normas para la prioridad de operadores ESQL
Función CAST
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ac16755_