Calcolo di un intervallo di tempo

Questo esempio ESQL calcola l'intervallo di tempo che intercorre tra l'inserimento di un messaggio WebSphere MQ di input nella coda di input ed il momento in cui viene elaborato nel nodo Compute corrente.

(Quando si effettua una chiamata ad una funzione CURRENT_ datetime, il valore restituito è identico al valore restituito in un'altra chiamata nello stesso nodo. Questo garantisce che si possa utilizzare la funzione in modo coerente all'interno di un singolo nodo.)

 CALL CopyMessageHeaders();
 Declare PutTime INTERVAL;

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

Il messaggio di output ha il formato (sebbene cambino i valori reali):

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

Il seguente snippet di codice imposta un timer, da far partire dopo un intervallo di tempo specificato dall'inizio dell'elaborazione, per controllare che l'elaborazione sia completata. Se l'elaborazione non è completata entro il tempo trascorso, l'avvio del timer potrebbe, ad esempio, lanciare un'elaborazione di ripristino.

Il campo StartTime del messaggio di richiesta di timeout è impostato sull'ora corrente più il periodo di ritardo consentito, stabilito da una proprietà definita dall'utente nel flusso. (La proprietà definita dall'utente è stata impostata in una stringa formato "HH:MM:SS" dall'amministratore.)

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

	CREATE PROCEDURE ValidateTimeoutRequest() BEGIN

		-- Impostare il periodo di timeout
		DECLARE timeoutStartTimeRef REFERENCE TO 
          OutputRoot.XMLNSC.Envelope.Header.TimeoutRequest.StartTime;
		IF LASTMOVE(timeoutStartTimeRef)
			THEN
			-- Già impostato
		ELSE
			-- Impostarlo dalla UDP StartDelyIntervalStr 
			DECLARE startAtTime TIME CURRENT_TIME 
          + CAST(StartDelyIntervalStr AS INTERVAL HOUR TO SECOND);
						
			-- Convertire "TIME 'hh.mm.ss.fff'" nel formato hh.mm.ss 
       -- necessario nel 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;
Concetti correlati
Panoramica dei flussi di messaggi
Panoramica delle mappature di messaggi
Attività correlate
Sviluppo di flussi di messaggi
Sviluppo di ESQL
Utilizzo degli operatori numerici con i valori datetime
Riferimenti correlati
Nodi integrati
Riferimento ESQL
Tipo di dati INTERVAL ESQL
Operatori numerici ESQL
Regole per la precedenza dell'operatore ESQL
Funzione CAST
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ac16755_