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

WMB这方面的资料少的可怜,几乎是找不到,.  我既然是WMB开发者的一员,.尽情的分享本身的经验.数据库

写一个小小WMB链接数据库实例,  帮助本身也方便你们,.oracle

废话很少说.直奔主题..工具

 

 

在使用ODBC链接数据库以前,.大概须要以下步骤:测试

 

1.安装oracle数据库.  安装好以后,而且创建表,好比我创建两个表;spa

 

表一:CUSTOMER表;两个字段..net

CUST_ID         VARCHAR2(6),
CUST_NAME    VARCHAR2(6)3d

 

而且给表插入值:代理

CUST_I         CUST_NAME
------ -           ------------------
100001         周海涛code

100002         张三xml

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

相关文章
相关标签/搜索