软件开发wmb 7.0wmb

Esql中数据采集控制

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

11同行回答

xuanshikejixuanshikeji硬件开发工程师唐山轩氏科技有限公司
打印机数据采集方案是否满足您的要求 qq:123668767显示全部

打印机数据采集方案是否满足您的要求 qq:123668767

收起
硬件生产 · 2017-09-13
浏览1978
deaglepolodeaglepolo软件开发工程师LKJH
嗯,再次感谢斑竹哥赐教,:handshake。显示全部
嗯,再次感谢斑竹哥赐教,:handshake。收起
软件开发 · 2013-12-16
浏览2042
liushaoyiliushaoyi技术经理华润
接口设计时就要统一字段格式,最好在源头统一日期数据的格式。显示全部
接口设计时就要统一字段格式,最好在源头统一日期数据的格式。收起
互联网服务 · 2013-12-16
浏览2041
deaglepolodeaglepolo软件开发工程师LKJH
嗯,是同一个字段,是TIMESTAMP类型。这个算是DB2的一个BUG么... 很疑惑。  开始我也是想着用LENGTH函数做判断,由于对ESQL语法不熟,没搞定。所以找了个解决办法,就是用SUBSTRING对所有的数据都做截取,测试没问题了。...显示全部
嗯,是同一个字段,是TIMESTAMP类型。这个算是DB2的一个BUG么... 很疑惑。  开始我也是想着用LENGTH函数做判断,由于对ESQL语法不熟,没搞定。所以找了个解决办法,就是用SUBSTRING对所有的数据都做截取,测试没问题了。收起
软件开发 · 2013-12-16
浏览2017
liushaoyiliushaoyi技术经理华润
同一个字段也有不同长度的?如果要判断长度的话就用LENGTH函数。显示全部
同一个字段也有不同长度的?
如果要判断长度的话就用LENGTH函数。收起
互联网服务 · 2013-12-16
浏览2016
deaglepolodeaglepolo软件开发工程师LKJH
下面这一段是国外针对先前问题的回答,也没测试,不知道怎么样。Hi,Were using Oracle here but I've managed to use the equivalent of FETCH FIRST n ROWS. The sql string is SET sql = 'SELECT DATA_KEY, DATA_VALUE FROM esb.ENVIRONMENT_VALUES WHERE ENVIRONMENT = ?...显示全部
下面这一段是国外针对先前问题的回答,也没测试,不知道怎么样。
Hi,
Were using Oracle here but I've managed to use the equivalent of FETCH FIRST n ROWS. The sql string is

SET sql = 'SELECT DATA_KEY, DATA_VALUE FROM esb.ENVIRONMENT_VALUES WHERE ENVIRONMENT = ? AND ROWNUM <= ?';

We create an array called DB_IN_PARAMS of all the parameters

SET DB_IN_PARAMS.PARAM1 = 'ALL';
SET DB_IN_PARAMS.PARAM2 = 2;

We then issue the PASSTHRU statment

Passthru(sql, DB_IN_PARAMS.[]);

Have you checked the syntax of your SQL statement ? Are the parameters your passing through an INTEGER for the number of rows ?收起
软件开发 · 2013-12-14
浏览2025
deaglepolodeaglepolo软件开发工程师LKJH
首先谢谢斑竹哥解疑:handshake,膜拜下。  开始没加单引号主要是语法报错,加单引号了能通过,我还没测试是否有效,测试完我再针对这个问题向您求教。另外还遇到了一个新的问题,有些蹊跷。在同一条队列消息中的数据,出现了两种时间格式(注:是相同的库产生),2013-12-04T10:02...显示全部
首先谢谢斑竹哥解疑:handshake,膜拜下。  开始没加单引号主要是语法报错,加单引号了能通过,我还没测试是否有效,测试完我再针对这个问题向您求教。另外还遇到了一个新的问题,有些蹊跷。在同一条队列消息中的数据,出现了两种时间格式(注:是相同的库产生),2013-12-04T10:02:23
2013-12-06T16:02:47.740 这是同一队列消息中的两条数据的时间,第一个时间格式是yyyy-MM-dd HH:mm:ss,第二个是yyyy-MM-dd HH:mm:ss.SSS。对此我在ESQL中如果把时间转换写死的话WMB在解析XML消息的时候就会因为格式问题堵塞,下面是我在ESQL中对时间格式的转换:
IF SELECT count(*) FROM Database.db2admin.DTYW_QZCY_JG AS H WHERE H.YWBH=InputRoot.XMLNSC.Data.DTYW_QZCY_JG[I].YWBH =1 THEN
        UPDATE Database.db2admin.DTYW_QZCY_JG AS T        SET
JGSJ=CAST(REPLACE(InputRoot.XMLNSC.Data.DTYW_QZCY_JG[I].JGSJ,'T',' ') AS TIMESTAMP FORMAT 'yyyy-MM-dd HH:mm:ss'),
如果我要在这之前对这个数据进行判断,按照读取的时间长度进行对应时间格式转换,要怎么写呢?弱弱的说下才接触ESQL,对语法很生疏,希望大神指点一二,再次感谢。收起
软件开发 · 2013-12-14
浏览2058
deaglepolodeaglepolo软件开发工程师LKJH
ORACLE这种写法语法确实是通过了,但是DB2的写法FETCH FIRST N ROWS ONLY 语法还是过不了,我这边的环境主要是DB2。我自己后来是通过做判断跳出循环实现了,但是还是觉得如果能从第一步提取时就限制了数据量较优。...显示全部
ORACLE这种写法语法确实是通过了,但是DB2的写法FETCH FIRST N ROWS ONLY 语法还是过不了,我这边的环境主要是DB2。我自己后来是通过做判断跳出循环实现了,但是还是觉得如果能从第一步提取时就限制了数据量较优。收起
软件开发 · 2013-12-13
浏览2040
liushaoyiliushaoyi技术经理华润
我这是ORACLE的写法,你换成DB2的就成。显示全部
我这是ORACLE的写法,你换成DB2的就成。收起
互联网服务 · 2013-12-12
浏览2134
liushaoyiliushaoyi技术经理华润
可以使用PASSTHRU 执行本地SQL,试试SET InputLocalEnvironment.Variables.temp[] = PASSTHRU (SELECT E.EVENT_ID,E.OBJECT_KEY,E.OBJECT_VERB FROM Database.DB2ADMIN.BUSINESS_DC_EVENTS AS E where rownum>10);显示全部
可以使用PASSTHRU 执行本地SQL,试试
SET InputLocalEnvironment.Variables.temp[] = PASSTHRU (SELECT E.EVENT_ID,E.OBJECT_KEY,E.OBJECT_VERB FROM Database.DB2ADMIN.BUSINESS_DC_EVENTS AS E where rownum>10);收起
互联网服务 · 2013-12-12
浏览2037

提问者

deaglepolo
软件开发工程师LKJH

问题状态

  • 发布时间:2013-12-10
  • 关注会员:2 人
  • 问题浏览:7789
  • 最近回答:2017-09-13
  • X社区推广