CREATE COMPUTE MODULE BUSINESS_DC_DETAILS_FS_计算 CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN -- CALL CopyMessageHeaders(); -- CALL CopyEntireMessage();
DECLARE s INTEGER 0; SET InputLocalEnvironment.Variables.temp[] = SELECT E.EVENT_ID,E.OBJECT_KEY,E.OBJECT_VERB FROM Database.db2admin.BUSINESS_DC_DETAILS_EVENTS AS E;
--根据事件DATA_ID操作获取数据 CALL GetMessage();
RETURN TRUE; END;
CREATE PROCEDURE GetMessage() BEGIN DECLARE I INTEGER 1; DECLARE J INTEGER; SET J = CARDINALITY(InputLocalEnvironment.Variables.temp[]); X:WHILE I < J+1 DO -- --SET InputLocalEnvironment.Variables.HD[I] = THE(SELECT * FROM Database.admin.HD AS H where H.HDID = InputLocalEnvironment.Variables.temp[I].DATA_ID); -- --SET OutputRoot.XMLNSC.Data.HD[I] = InputLocalEnvironment.Variables.HD[1]; SET OutputRoot.XMLNSC.Data.BUSINESS_DC_DETAILS[I] = THE(SELECT * FROM Database.db2admin.BUSINESS_DC_DETAILS AS H where H.MXDM = InputLocalEnvironment.Variables.temp[I].OBJECT_KEY); SET OutputRoot.XMLNSC.Data.BUSINESS_DC_DETAILS[I].OBJECT_VERB = InputLocalEnvironment.Variables.temp[I].OBJECT_VERB; -- --删除事件数据 DELETE FROM Database.db2admin.BUSINESS_DC_DETAILS_EVENTS AS E WHERE E.EVENT_ID = InputLocalEnvironment.Variables.temp[I].EVENT_ID; SET I = I + 1; IF I = 5 THEN LEAVE X; END IF; END WHILE; END;
CREATE PROCEDURE CopyEntireMessage() BEGIN SET OutputRoot = InputRoot; END; END MODULE; 这个是我发送方的ESQL代码,在这里只是用跳出循环做了控制一次性从事件表读取的记录条数 IF I = 5 THEN LEAVE X; END IF; END WHILE; 发过去的应该仍然是完整的消息,并没有对消息做切割处理。我发过去的数据长度应该是图片中的总长度,也就是2000多。队列消息长度最高应该不是只有1000的,以前碰到其他队列堵塞原因的时候队列消息长度有10000的。