轉自:
http://www.cnblogs.com/zhaoDotNet/archive/2010/09/17/1829509.html
作者:ZhaoDotNet
感謝 ZhaoDotNet 無私分享他的經驗。
近一段時間在網路中遇到了HubbleDotNet 的創始人,應他的請求,第一次在cnblog中寫部落格,先將我昨天學到的貼上來,希望能夠了幫到更多使用HubbleDotNet的人們;
昨天在創始人的協助下,我完成了Hubble同Oracle之間資料的同步問題,寫這篇文章,主要是完善HubbleDotNet 的創始人沒有寫對Oracle資料庫即時同步的文章,現誠心奉上;
首先,在Hubble中建立與oracle對應的表,
下一步,點擊Next按鈕
點擊Next按鈕
這裡說明一下,ID Field寫的一定是唯一標識的主鍵,並且必須是整型(oracle中是NUMBER型)的,我定義的是BUFFERID, 因為Oracle中沒有自增長功能,所有請朋友們自己寫個觸發器或者別的方法讓它自增,實現了就可以;還有一點就是如我的主鍵DataType必須選擇為Int,Analyzer必須為Untokenized,至此即完成了建立Hubble表的過程,如果想實現資料的同步,接著往下看;
為了讓資料庫中的資料與Hubble資料同步,我們先在Oracle中建立一個輔助觸發表,主要的功能是記錄T_Goods表中哪些欄位的內容發生了變化的,將改變的欄位記錄到輔助觸發表中,代碼如下:
-- Create table
create table HBTRIGGER_VIEW_6
(
SERIAL NUMBER(10) not null,
ID NUMBER(10) not null,
OPR VARCHAR2(20),
FIELDS VARCHAR2(4000)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table HBTRIGGER_VIEW_6
add constraint PK_SERIAL primary key (SERIAL)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
說明:表中的SERIAL為主鍵,必須是自增的整形欄位;ID 不可定義為別的名稱(經驗);
對於如何將改變的內容欄位記錄下來,我寫了一個觸發器,代碼如下:
create or replace trigger HBTrigger_T_6_Update
after update on FOR EACH ROW
DECLARE
updateFields VARCHAR2(4000) :='';
begin
if :new.GOODS_NAME !=:old.GOODS_NAME then
updateFields:='GOODS_NAME,';
END IF;
if :new.GOODS_BRAND !=:old.GOODS_BRAND then
updateFields:=updateFields||'GOODS_BRAND,';
END IF;
.
.//中間需要的欄位自己加吧
.
if updateFields is not null then
insert into HBTRIGGER_VIEW_6(ID,Opr,Fields) values(:new.BUFFERID,'Update', updateFields) ;
end if;
end HBTrigger_T_6_Update;
這時修改了T_GOODS中的欄位後,輔助觸發表是就發生了如下變化:
這些工作完成後,我們轉到Hubble,
現在我們在剛才建好的T_Goods表上右擊,選擇Table Info,開啟Attributes選項框,將TableSynchronization改為True,TriggerTableName填寫我們剛建立的輔助觸發表名,點擊Set完成;
現在我們進行同步操作,在剛才建好的T_Goods表上右擊,選擇Synchronize Table,點擊Start,結果如,
現在你查詢一下你的Hubble記錄,是不是跟Oracle表中的記錄一樣呢,當然這些工作我們也可以在程式中完成,具體的怎麼寫,請查看Hubble創始人的部落格http://www.cnblogs.com/eaglet/archive/2010/08/25/1808143.html。
如果你看完這篇文章覺得寫觸發器麻煩,在此,也有專門為懶人準備的簡單的操作方法,只需要兩步:
一、在剛才建好的T_Goods表上右擊,選擇Truncate Table;
二、在剛才建好的T_Goods表上右擊,選擇Synchronize Table,點擊Start;
這樣操作只是費點時間,不過對於懶人來說,最不珍惜的就是時間,也無所謂了;
如果你在中間的某些操作出現問題,請留言。也可下載最新的Hubble版本,隨時更新;
註:如轉載請標明出處(eaglet除外)
返回 Hubble.net 技術詳解