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,搭建主流程.

 

WMB 使用Compute节点连接Oracle数据库实例_第1张图片

 

 

 

插入数据子流程:

 

WMB 使用Compute节点连接Oracle数据库实例_第2张图片 

 

 

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

 

 

 

  • WMB 使用Compute节点连接Oracle数据库实例_第3张图片

  • 大小: 11 KB

  • WMB 使用Compute节点连接Oracle数据库实例_第4张图片

  • 大小: 5.5 KB


你可能感兴趣的:(WMB 使用Compute节点连接Oracle数据库实例)