メッセージ・ツリー内の反復フィールドの操作

このトピックでは、SELECT 関数、および他の列関数を使用して、メッセージ・ツリーの反復フィールドを操作することについて説明します。

その合計注文数が、ある一定の量を超える invoice (送り状) に対して特別なアクションを実行するとします。Invoice フィールドの合計注文数を算出するには、メッセージ中の Items すべての Price フィールドを Quantity フィールドで乗算し、その結果を合計する必要があります。これを、次のように SELECT 式を使用して行うことができます。

(
 SELECT SUM( CAST(I.Price AS DECIMAL) * CAST(I.Quantity AS INTEGER) )
  FROM Body.Invoice.Purchases."Item"[] AS I
) 

この例では、Price および Quantity フィールドのストリング値を適切なデータ・タイプにキャストするために、CAST 式を使用する必要があると想定しています。Price フィールドを decimal (10 進数) にキャストすると、自然な 位取りと精度、つまり、数を表すために必要な位取りと精度を持つ 10 進数値が生成されます。これらの CAST は、データがすでに適切なデータ・タイプの場合には、必ずしも必要とは限りません。

SELECT 式は比較述部に対しても同じように機能し、また標準データベース SQL の SELECT とまったく同じように機能します。FROM 文節は、反復対象を指定し (この場合は、Invoice 内のすべての Item フィールド)、また Item の現行のインスタンスを I を使用して参照できるように設定します。この SELECT の形式には列関数も関係しており (この場合は SUM 関数)、そのため、Invoice 内の Item フィールドごとの、SUM 関数内の式の評価結果をすべて加算することによって SELECT は評価されます。標準 SQL と同じように、NULL 値は列関数によって無視されます。ただし、以下で説明する COUNT 列関数は例外です。結合する非 NULL 値が存在しない場合のみ、列関数によって NULL 値が戻されます。

その他にも、MAX、MIN、および COUNT などの列関数が提供されています。COUNT 関数には、NULL に関して機能の仕方が異なる 2 つの形式があります。最初の形式は、上記の SUM 関数と非常に類似しています。例えば、次のようになります。

SELECT COUNT(I.Quantity)
  FROM Body.Invoice.Purchases."Item"[] AS I

この式は、Quantity フィールドが NULL 以外になっている Item フィールドの個数を戻します。つまり、COUNT 関数は、SUM 関数が非 NULL 値を加算するのと同じ方法で非 NULL 値をカウントします。COUNT 関数には、次のような別の使い方もあります。

SELECT COUNT(*)
  FROM Body.Invoice.Purchases."Item"[] AS I

COUNT(*) を使用すると、フィールドが NULL かどうかに関係なく、Item フィールドの合計数をカウントします。上記の例は実際には、次の CARDINALITY 関数の使用と同等です。

CARDINALITY(Body.Invoice.Purchases."Item"[]

標準 SQL の場合と同じように、ここで挙げたすべての SELECT の例でも、WHERE 文節を使用してフィールドのフィルター操作を行うことができます。

関連概念
メッセージ・フローの概要
ESQL の概要
メッセージのモデル化
関連タスク
メッセージ・フローの設計
メッセージ・フローの内容の定義
ESQL ファイルの管理
関連資料
Compute ノード
Database ノード
Filter ノード
ESQL 参照
CARDINALITY 関数
SELECT 関数
サンプル・メッセージ
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ak20705_