- 相關(guān)推薦
Oracle觸發(fā)器在MIS 開發(fā)中的應用
Oracle觸發(fā)器在MIS 開發(fā)中的應用
周海濤 吳良剛
摘要:本文介紹了oracle觸發(fā)器的概念和類型,總結(jié)了oracle觸發(fā)器在開發(fā)MIS中的應用,并提供了實例以供參考.
關(guān)鍵詞:MIS 、觸發(fā)器 oracle
1.引言
本人在做一個大型的MIS系統(tǒng)(前臺用powerbuild工具,后臺用oracle數(shù)據(jù)庫)時,常碰到一些有關(guān)數(shù)據(jù)冗長性,批量刪除和動態(tài)信息方面的問題,由此發(fā)現(xiàn)數(shù)據(jù)庫觸發(fā)器簡單易用,F(xiàn)將有關(guān)開發(fā)和應用中的一些體會總結(jié)成文,供同行參考。
2.觸發(fā)器的概念和類型。
數(shù)據(jù)庫觸發(fā)器(database triggers)是響應插入、更新或刪除等數(shù)據(jù)庫事件而執(zhí)行的過程。它定義了當一些數(shù)據(jù)庫相關(guān)事件發(fā)生時應采取的動作?捎糜诠芾韽碗s的完整性約束,或監(jiān)控對表的修改,或通知其它程序,表已發(fā)生修改。它的類型有:語句級觸發(fā)器,以及行級觸發(fā)器,前者可以在語句執(zhí)行前或執(zhí)行后被觸發(fā)。后者在每個觸發(fā)語句影響的行觸發(fā)一次。還有before和after觸發(fā)的命令。在insert,update,和delete之前或之后執(zhí)行,引用新舊值進行處理。如果需通過觸發(fā)器設定插入行中的某列值,則為了訪問“新(new)”值,需使用一個觸發(fā)器before insert,使用after insert則不行。Instead of 觸發(fā)器命令,使用它告訴oracle應執(zhí)行什么操作。以上四種大類合成14種小類(略)。各種觸發(fā)器的執(zhí)行順序如下:
⑴ 如果有,最先執(zhí)行語句級before觸發(fā)器。
⑵ 每個insert,delete,update影響的行;
① 如果有,最先執(zhí)行行級before
② 執(zhí)行行的delete或update
③ 如果有,執(zhí)行行級after觸發(fā)器
⑶ 如果有,執(zhí)行語句級after觸發(fā)器
3.使用數(shù)據(jù)庫觸發(fā)器管理數(shù)據(jù)冗余性
為了數(shù)據(jù)分析和制作報表的需要,用戶在數(shù)據(jù)模型中加入了冗余數(shù)據(jù),應使用觸發(fā)器,以保證數(shù)據(jù)的完整性。
冗余數(shù)據(jù)可以用規(guī)定的 for each row選項的before update觸發(fā)器進行管理。update 命令可放在觸發(fā)器中對所有需要更新的冗余數(shù)據(jù)進行更新,如客戶表和訂單表,訂單表包括客戶的訂單和客戶表的冗余信息,客戶表(customer)的表結(jié)構(gòu):客戶號(cu_no)、客戶名(cu_name)、客戶地址(cu_address)。訂單表(order)的表結(jié)構(gòu):訂單號(or_no),客戶號(or_no),客戶名(cu_name),客戶地址(cu_address),當客戶基表中的數(shù)據(jù)被更新時更新訂單中的冗余列。語法如下:
create or replace trigger bj_customer
before update on customer
for each row
begin
update order set
cu_no=:new.cu_no,
cu_name=:new.cu_name,
cu_address=:new.cu_addess,
where cu_no=:old.cu_no;
end;
4.用觸發(fā)器完成數(shù)據(jù)復制
如果需求非常有限,可以用數(shù)據(jù)觸發(fā)器從一個數(shù)據(jù)庫中向另一個數(shù)據(jù)庫復制數(shù)據(jù),如果數(shù)據(jù)復制需求僅與數(shù)據(jù)的插入有關(guān),當一條記錄插入到一個數(shù)據(jù)庫中的某個基表中時,用戶還希望把這條記錄插入到一個遠程數(shù)據(jù)庫中,需用create database link語句創(chuàng)建一條到遠程數(shù)據(jù)庫的連接,一旦創(chuàng)建了一條數(shù)據(jù)庫連接后,就可以在基表上創(chuàng)建一個after insert觸發(fā)器,以把每一條記錄插入到遠程數(shù)據(jù)庫中。
(1)在腳本中創(chuàng)建數(shù)據(jù)庫連接(database link)bj_ysd_remote基表作為數(shù)據(jù)庫基表,Bj_ysd_local代表本地數(shù)據(jù)庫上的源基表。
Creat database link remote(連接名)
Connect to bj(帳戶) indentified by bj(密碼)
Using ‘:2’;
(2)復制記錄
create or replace trigger trig_ysd(觸發(fā)器名)
after insert on bj_ysd_local
for each row
begin
insert into bj_ysd_remote@dblink remote
value(:new.x1,:new.x2,……)/*x1.x2代表字段名*/
end;
(3)刪除記錄
create or replace trigger trig_ys
【Oracle觸發(fā)器在MIS 開發(fā)中的應用】相關(guān)文章:
MIS開發(fā)中軟件工程方法的運用03-18
ORACLE RAC集群在電力營銷系統(tǒng)中的應用03-18
對MIS 開發(fā)模式的策略研究03-18
項目管理在ASP軟件開發(fā)中的應用03-23
Oracle Portal及其門戶網(wǎng)站開發(fā)概述03-18
談計算機在油氣田開發(fā)中的應用03-18
探析計算機在油氣田開發(fā)中的應用03-18