软件开发wmb 7.0wmb

Esql中数据采集控制

CREATE COMPUTE MODULE BUSINESS_DC_FS_计算CREATE FUNCTION Main() RETURNS BOOLEANBEGINDECLARE s INTEGER 0;SET InputLocalEnvironment.Variables.temp[] = SELECT E.EVENT_ID,E.OBJECT_KEY,E.OBJECT_VERB FROM Database.DB2ADMIN.BUSINESS_DC_EVENTS AS E;CALL GetM...显示全部
CREATE COMPUTE MODULE BUSINESS_DC_FS_计算

CREATE FUNCTION Main() RETURNS BOOLEAN


BEGIN




DECLARE s INTEGER 0;


SET InputLocalEnvironment.Variables.temp[] = SELECT E.EVENT_ID,E.OBJECT_KEY,E.OBJECT_VERB FROM Database.DB2ADMIN.BUSINESS_DC_EVENTS AS E;


CALL GetMessage();


RETURN TRUE;


END;


CREATE PROCEDURE GetMessage() BEGIN


DECLARE I INTEGER 1;


DECLARE J INTEGER;


SET J = CARDINALITY(InputLocalEnvironment.Variables.temp[]);


WHILE I < J+1 DO


SET OutputRoot.XMLNSC.Data.BUSINESS_DC[I] = THE(SELECT * FROM Database.DB2ADMIN.BUSINESS_DC AS H where H.DCDM = InputLocalEnvironment.Variables.temp[I].OBJECT_KEY);


SET OutputRoot.XMLNSC.Data.BUSINESS_DC[I].OBJECT_VERB = InputLocalEnvironment.Variables.temp[I].OBJECT_VERB;


DELETE FROM Database.DB2ADMIN.BUSINESS_DC_EVENTS AS E WHERE E.EVENT_ID = InputLocalEnvironment.Variables.temp[I].EVENT_ID;


SET I = I + 1;


END WHILE;


END;


CREATE PROCEDURE CopyEntireMessage() BEGIN


SET OutputRoot = InputRoot;


END;

END MODULE;
这是WMB中发送方的ESQL的一段代码,通过获取时间表中的信息把表中数据交换到接收方,但是由于这段代码没有控制读取时间表中数据量,如果一次性增加或修改的数据过大,造成MQ队列数据堵塞。
我原本的想法是通过在这个SQL上SELECT E.EVENT_ID,E.OBJECT_KEY,E.OBJECT_VERB FROM Database.DB2ADMIN.BUSINESS_DC_EVENTS AS E添加TOP 或者ROWNUM来控制获取事件表中的条数(数据量),但是ESQL中好像不能使用(我用各个数据库的SQL试用都不行),求教大神有什么方法控制我从事件表中读取的数据条数。收起
参与13

查看其它 10 个回答deaglepolo的回答

deaglepolodeaglepolo软件开发工程师LKJH
ORACLE这种写法语法确实是通过了,但是DB2的写法FETCH FIRST N ROWS ONLY 语法还是过不了,我这边的环境主要是DB2。我自己后来是通过做判断跳出循环实现了,但是还是觉得如果能从第一步提取时就限制了数据量较优。
软件开发 · 2013-12-13
浏览2053

回答者

deaglepolo
软件开发工程师LKJH

deaglepolo 最近回答过的问题

回答状态

  • 发布时间:2013-12-13
  • 关注会员:2 人
  • 回答浏览:2053
  • X社区推广