WMB 使用Compute节点连接Oracle数据库实例



 
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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值