WMB 使用Compute節點連線Oracle資料庫例項

悠悠隱於市發表於2011-06-12



 
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

 

 

 

相關文章