您的位置:首页 > 数据库 > Oracle

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

2015-06-29 14:02 399 查看
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代码


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代码:

Sql代码


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




大小: 11 KB




大小: 5.5 KB

WMB7_LAB4.rar (7.7 KB)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: