時間間隔の計算

この ESQL の例は、入力 WebSphere MQ メッセージが入力キューに書き込まれてから、現在の Compute ノードで処理されるまでの時間間隔を計算します。

(CURRENT_ datetime 関数を呼び出すと、戻される値は同じノードの別の呼び出しに戻される値と同じです。 このため、単一ノード内では関数を一貫して使用できます。)

 CALL CopyMessageHeaders();
 Declare PutTime INTERVAL;

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

出力メッセージの形式は、次のとおりです (実際の値は異なります)。

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

以下のコード断片は、処理が完了したことを確認するために、処理の開始から指定インターバル後にトリガーされるようにタイマーを設定します。 例えば、経過時間内に処理が完了しなかった場合に、タイマーの起動によっていくつかのリカバリー処理をトリガーすることもできるかもしれません。

タイムアウト要求メッセージの StartTime フィールドは、現行時刻に許容遅延期間 (フローのユーザー定義プロパティーによって定義される) を加えたものに設定されます (ユーザー定義プロパティーは管理者によって、"HH:MM:SS" 形式のストリングに設定されます)。

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

CREATE PROCEDURE ValidateTimeoutRequest() BEGIN

-- Set the timeout period
DECLARE timeoutStartTimeRef REFERENCE TO
OutputRoot.XMLNSC.Envelope.Header.TimeoutRequest.StartTime;
IF LASTMOVE(timeoutStartTimeRef)
			THEN
-- Already set
		ELSE
-- Set it from the UDP StartDelyIntervalStr
DECLARE startAtTime TIME CURRENT_TIME
+ CAST(StartDelyIntervalStr AS INTERVAL HOUR TO SECOND);
-- Convert "TIME 'hh.mm.ss.fff'" to hh.mm.ss format
       -- needed in StartTime field
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;
関連概念
メッセージ・フローの概要
メッセージ・マッピングの概要
関連タスク
メッセージ・フローの作成
ESQL の開発
日時値での数値演算子の使用
関連資料
組み込みノード
ESQL 参照
ESQL INTERVAL データ・タイプ
ESQL 数値演算子
ESQL 演算子優先順位の規則
CAST 関数
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ac16755_