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