(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 '1:21.862' 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;