時間間隔の計算

この 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, 2005 Last updated: 11/07/2005
ac16755_