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

相關文章
相關標籤/搜索