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语句.

 

 

Sql代码   收藏代码
  1. BROKER SCHEMA main  
  2.   
  3. --判断;  
  4. CREATE FILTER MODULE Exe4_Compute_Main_Filter  
  5.     CREATE FUNCTION Main() RETURNS BOOLEAN  
  6.     BEGIN  
  7.           
  8.         --如果地址是上海市,返回TRUE,否则返回FALSE;  
  9.         IF  Environment.Variables.address = '上海市' THEN   
  10.                 RETURN TRUE;  
  11.         ELSE   
  12.                 RETURN FALSE;     
  13.         END IF;  
  14.     END;  
  15.   
  16. END MODULE;  
  17.   
  18. --查询数据;写入XML文件.  
  19. CREATE COMPUTE MODULE Exe4_Compute_Main_Search  
  20.     CREATE FUNCTION Main() RETURNS BOOLEAN  
  21.     BEGIN  
  22.            
  23.         DECLARE tempName CHARACTER;  
  24.         --从数据库中获取Name字段;  
  25.         SET tempName = THE(SELECT ITEM T.CUST_NAME FROM Database.CUSTOMER AS T WHERE T.CUST_ID = InputRoot.XML.record.id);  
  26.           
  27.         --去空格;  
  28.         SET tempName = TRIM(BOTH  ' ' FROM tempName);  
  29.           
  30.         --创建record节点;  
  31.         CREATE FIELD OutputRoot.XML.record;  
  32.           
  33.         --引用record节点;  
  34.         DECLARE outputRecord REFERENCE TO OutputRoot.XML.record;  
  35.           
  36.         --创建record下面的子节点;  
  37.         SET outputRecord.id = InputRoot.XML.record.id ;  
  38.         SET outputRecord.name = tempName;  
  39.         SET outputRecord.address  = InputRoot.XML.record.address;  
  40.         SET outputRecord.amount1 = InputRoot.XML.record.amount1;  
  41.         SET outputRecord.amount2 = InputRoot.XML.record.amount2;  
  42.           
  43.         --把地址设置到环境变量中;  
  44.         SET Environment.Variables.address = InputRoot.XML.record.address;  
  45.         SET Environment.Variables.record = OutputRoot.XML.record;  
  46.         RETURN TRUE;  
  47.     END;  
  48.   
  49.     CREATE PROCEDURE CopyEntireMessage() BEGIN  
  50.         SET OutputRoot = InputRoot;  
  51.     END;  
  52. END MODULE;  

 

 

这个是输入插入子流程Database节点中的ESQL代码:

 

Sql代码   收藏代码
  1. BROKER SCHEMA bussess.subflow  
  2.   
  3. --插入数据到数据库中;  
  4. CREATE DATABASE MODULE Exe4_Compute_DB_Subflow_Database  
  5.     CREATE FUNCTION Main() RETURNS BOOLEAN  
  6.     BEGIN  
  7.           
  8.         --引用OutputRoot中的数据;  
  9.         DECLARE oututRecords REFERENCE TO Environment.Variables.record;  
  10.           
  11.         --插入数据到数据库中,数据来自于之前读取XML中的数据;  
  12.         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)));  
  13.       
  14.         RETURN TRUE;  
  15.     END;  
  16. 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

 

 

 

  • 大小: 11 KB
  • 大小: 5.5 KB
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值