使用DB2自带的SOAP UDF实现业务通知

DB2自带了WebService客户端的实现,具体命令如下:

启用命令:

db2enable_soap_udf -n dbName -u uID -p password [-force]
The parameters have the following definitions:
dbName - The database name to be enabled
uID user - ID for accessing the database
password - The password associated with the user ID
-force - Attempts to drop any existing functions.

如:db2enable_soap_udf -n MS_TRD -u zjyw -p 123456

启用成功后,可调用以下API接口:

db2xml.soaphttpv (VARCHAR(256), VARCHAR(256), VARCHAR(3072))
db2xml.soaphttpv (VARCHAR(256), VARCHAR(256), CLOB(1M))
db2xml.soaphttpc (VARCHAR(256), VARCHAR(256), varchar(3072))
db2xml.soaphttpc (VARCHAR(256), VARCHAR(256), CLOB(1M))
db2xml.soaphttpcl ( VARCHAR(256), VARCHAR(256), varchar(3072))

停用命令:

db2disable_soap_udf -n dbName -u uID -p password

调用步骤:

1、测试webService客户端与服务端的连通性

新建test.sql,编写如下代码:

 

connect to MS_TRD;
VALUES db2xml.soaphttpc(
'http://191.168.0.209:8080/SHCH/services/shch',
'http://191.168.0.209:8080/SHCH/services/shch.shchHttpEndpoint/',
varchar ('<SendMessage xmlns="http://axis2.shch.xtp.xquant.com"><action>81</action><requestXml>12345</requestXml></SendMessage>'
)
);

 在DB2命令窗口中执行:db2 -tvf d:\test.sql

成功调用后,就可以继续写DB2函数供存储过程或者触发器调用了

2、新建表TTRD_UDF,具体见使用 DB2 触发器和Java UDF实现业务通知

 

3、新增10000条测试数据

begin atomic 
 declare v_cnt int;
 set v_cnt=0;
 while (v_cnt<10000) do 
 insert into TTRD_UDF(CODE, NAME, REMARK) values (rtrim(char(v_cnt+100000)),'test', '-');
 set v_cnt=v_cnt+1;
 end while;
end

 

4、新建DB2函数

CREATE FUNCTION zjyw.SENDMESSAGE2 (symbol VARCHAR(100))
RETURNS VARCHAR(1000)
LANGUAGE SQL CONTAINS SQL
EXTERNAL ACTION NOT DETERMINISTIC
RETURN
VALUES db2xml.soaphttpc(
'http://191.168.0.209:8080/SHCH/services/shch',
'http://191.168.0.209:8080/SHCH/services/shch.shchHttpEndpoint/',
varchar ('<SendMessage xmlns="http://axis2.shch.xtp.xquant.com"><action>81</action><requestXml>'|| + symbol + ||'</requestXml></SendMessage>' ) ) )

5、新建TTRD_UDF触发器

CREATE TRIGGER ZJYW.AFTER_UPDATE_UFT
AFTER UPDATE OF NAME ON ZJYW.TTRD_UDF
REFERENCING OLD AS OLDROW NEW AS NEWROW
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
IF(NEWROW.NAME<>'')
THEN
VALUES(SENDMESSAGE2(OLDROW.CODE));
END IF;
END;

6、测试批量修改10000条数据性能

update zjyw.TTRD_UDF set NAME='TEST2'

全部执行完成耗时36分17秒,性能很一般。

如果WebService服务端未开启时,触发器会超时等待,实用性比较差。

posted @ 2014-12-15 14:29  chugf  阅读(305)  评论(0编辑  收藏  举报