其它和前例一样,但遍历代码如下:
CREATE COMPUTE MODULE flow_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
-- 员工总数
DECLARE Count INTEGER 0;
-- 得到XML中员工总数
SET Count=CARDINALITY(InputRoot.XML.employees.employee[]);
-- 员工姓名汇总
DECLARE Names CHARACTER;
SET Names='';
-- 最大年龄
DECLARE MaxAge INTEGER 0;
-- 年龄合计
DECLARE SumAge INTEGER 0;
-- 当前年龄
DECLARE CurrAge INTEGER 0;
-- 循环变量
FOR CurrItem AS InputRoot.XML.employees.employee[] DO
-- 字符串拼接
SET Names=Names || CurrItem.name ;
SET Names=Names || ',';
-- 字符串转换成整数再进行年龄合计
SET CurrAge = CAST(CurrItem.age AS INTEGER);
SET SumAge=SumAge+CurrAge;
-- 得到最大年龄
IF MaxAge<CurrAge THEN
SET MaxAge=CurrAge;
END IF;
END FOR;
-- 平均年龄
DECLARE AvgAge FLOAT;
SET AvgAge=SumAge/Count;
-- 拼接输出XML
SET OutputRoot.XML.summary.count=Count;
SET OutputRoot.XML.summary.names=Names;
SET OutputRoot.XML.summary.maxAge=MaxAge;
SET OutputRoot.XML.summary.avgAge=CAST(AvgAge AS CHARACTER);
RETURN TRUE;
END;
END MODULE;
相比较而言,这种方式更简洁方便。
下载地址:
http://www.blogjava.net/Files/heyang/ESqlTest0920_02.rar