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