WMB这方面的资料少的可怜,几乎是找不到,. 我既然是WMB开发者的一员,.尽情的分享自己的经验.
写一个小小WMB连接数据库实例, 帮助自己也方便大家,.
废话不多说.直奔主题..
在使用ODBC连接数据库之前,.大概需要如下步骤:
1.安装oracle数据库. 安装好之后,并且建立表,比如我建立两个表;
表一:CUSTOMER表;两个字段.
CUST_ID VARCHAR2(6),
CUST_NAME VARCHAR2(6)
并且给表插入值:
CUST_I CUST_NAME
------ - ------------------
100001 周海涛
100002 张三
100003 李四
表二:RECORDS(记录表)字段如下:
ID NOT NULL VARCHAR2(6)
NAME NOT NULL VARCHAR2(40)
ADDRESS NOT NULL VARCHAR2(60)
AMOUNT1 NUMBER(8,2)
AMOUNT2 NUMBER(8,2)
2.配置ODBC数据源.
在配置数据源之前,需要启动oracle 实例服务及 监听服务.
控制面板->管理工具->ODBC数据源->系统DSN->添加->
数据驱动选择:Message Broker DataDirect Technologies 6.0 32 BIt Oracle Wire Protocol.
点击完成.
需要输入:
Dat Source Name数据源名称,任意即可.
Description 描述.可以不输入.
Host: 数据主机地址,或者远程的IP地址.
Port Number:端口号,默认为1521.
SID: 实例名称,比如ORCL
点击Test Connect 连接测试,输入用户名和密码 ,这里我测试的用户是scott用户,密码tiger;
提示:Connection established 已建立连接.表示连接成功..
3.使用MQSI命令设置把ODBC设置到broker代理中..并且指定数据源, 用户名,密码.
在cmd直接切换到 C:\Program Files\IBM\MQSI\7.0>目录或者是在直接WMB中找到命令管理器.
输入,
--设置连接数据源参数; exebroker -代表代理, -n DBDATASOURCE 代表数据源, -u scott代表用户名, -p 代表密码;
C:\Program Files\IBM\MQSI\7.0>mqsisetdbparms exebroker -n DBDATASOURCE -u scott -p tiger
BIP8071I: 命令成功完成。
4.建立Message Flow项目,建立Message Flow,搭建主流程.
插入数据子流程:
5.这是主流程ESQL语句.
BROKER SCHEMA main --判断; CREATE FILTER MODULE Exe4_Compute_Main_Filter CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN --如果地址是上海市,返回TRUE,否则返回FALSE; IF Environment.Variables.address = '上海市' THEN RETURN TRUE; ELSE RETURN FALSE; END IF; END; END MODULE; --查询数据;写入XML文件. CREATE COMPUTE MODULE Exe4_Compute_Main_Search CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN DECLARE tempName CHARACTER; --从数据库中获取Name字段; SET tempName = THE(SELECT ITEM T.CUST_NAME FROM Database.CUSTOMER AS T WHERE T.CUST_ID = InputRoot.XML.record.id); --去空格; SET tempName = TRIM(BOTH ' ' FROM tempName); --创建record节点; CREATE FIELD OutputRoot.XML.record; --引用record节点; DECLARE outputRecord REFERENCE TO OutputRoot.XML.record; --创建record下面的子节点; SET outputRecord.id = InputRoot.XML.record.id ; SET outputRecord.name = tempName; SET outputRecord.address = InputRoot.XML.record.address; SET outputRecord.amount1 = InputRoot.XML.record.amount1; SET outputRecord.amount2 = InputRoot.XML.record.amount2; --把地址设置到环境变量中; SET Environment.Variables.address = InputRoot.XML.record.address; SET Environment.Variables.record = OutputRoot.XML.record; RETURN TRUE; END; CREATE PROCEDURE CopyEntireMessage() BEGIN SET OutputRoot = InputRoot; END; END MODULE;
这个是输入插入子流程Database节点中的ESQL代码:
BROKER SCHEMA bussess.subflow --插入数据到数据库中; CREATE DATABASE MODULE Exe4_Compute_DB_Subflow_Database CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN --引用OutputRoot中的数据; DECLARE oututRecords REFERENCE TO Environment.Variables.record; --插入数据到数据库中,数据来自于之前读取XML中的数据; INSERT INTO Database.RECORDS(ID,NAME,ADDRESS,AMOUNT1,AMOUNT2) VALUES (oututRecords.id,oututRecords.name,oututRecords.address,CAST(oututRecords.amount1 AS DECIMAL(8,2)),CAST(oututRecords.amount2 AS DECIMAL(8,2))); RETURN TRUE; END; END MODULE;
6.部署,归档.发布,.然后 测试是否通过。
测试的时候,使用的是rfhutil.exe工具进行测试,
读取的本地的一个record1.xml文件
内容如下:
<record> <id>100001</id> <address>南京市</address> <amount1>560.00</amount1> <amount2>300.00</amount2> </record>
如果通过,则会在数据中成功插入一条数据.
SQL> select * from records;
ID NAME ADDRESS AMOUNT1 AMOUNT
------ ---------------------------- ------------------------------ ------------------- ---------- ------
100001 周海涛 南京市 560.00 300.00