<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    鷹翔宇空

    學習和生活

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks

    引自:http://64.233.179.104/search?q=cache:8yAnO65MhwEJ:www.ahetc.gov.cn/cit/200108/06.doc+oracle+%E8%A7%A6%E5%8F%91%E5%99%A8&hl=zh-CN&ct=clnk&cd=2

    Oracle觸發(fā)器在MIS 開發(fā)中的應用

                        周海濤   吳良剛

    摘要:本文介紹了oracle觸發(fā)器的概念和類型,總結了oracle觸發(fā)器在開發(fā)MIS中的應用,并提供了實例以供參考.

    關鍵詞:MIS 、觸發(fā)器  oracle

    1.引言

        本人在做一個大型的MIS系統(tǒng)(前臺用powerbuild工具,后臺用oracle數(shù)據(jù)庫)時,常碰到一些有關數(shù)據(jù)冗長性,批量刪除和動態(tài)信息方面的問題,由此發(fā)現(xiàn)數(shù)據(jù)庫觸發(fā)器簡單易用。現(xiàn)將有關開發(fā)和應用中的一些體會總結成文,供同行參考。

    2.觸發(fā)器的概念和類型。

        數(shù)據(jù)庫觸發(fā)器(database triggers)是響應插入、更新或刪除等數(shù)據(jù)庫事件而執(zhí)行的過程。它定義了當一些數(shù)據(jù)庫相關事件發(fā)生時應采取的動作。可用于管理復雜的完整性約束,或監(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影響的行;
    1. 如果有,最先執(zhí)行行級before
    1. 執(zhí)行行的delete或update
    2. 如果有,執(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)的表結構:客戶號(cu_no)、客戶名(cu_name)、客戶地址(cu_address)。訂單表(order)的表結構:訂單號(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ù)的插入有關,當一條記錄插入到一個數(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_ysd_del

          after delete on bj_ysd_local

          for each row

          begin

              delete from bj_ysd_remote@dblink remote

          where x1=:old.x1

          end;

    5.用數(shù)據(jù)庫觸發(fā)器完成瀑布式刪除操作

        在某些情況下,當要刪除一條記錄時,該記錄是與外鍵有關的另外一張基表上的記錄時,這個刪除操作必須在模型中進行傳遞,否則會出現(xiàn)大量的冗長數(shù)據(jù),仍以cumstomer 和order基表為例,當從customer中刪除一個客戶時,order基表中所有相關記錄也應當刪除。

        Create or replace trigger trig_cust

        Before delete on  customer

        For each row

        Begin

            Delete from order;

            Where  cu_no=old.cu_no;

       End;

    6.用觸發(fā)器完成動態(tài)數(shù)據(jù)的操作

        在涉及如何實現(xiàn)動態(tài)庫存的問題時,可用觸發(fā)器解決。倉庫有驗收、出庫、調撥、報廢、退料、讓售等這些數(shù)據(jù)必須與以前的庫存相加減,才能完成動態(tài)庫存操作。本文僅以驗收單觸發(fā)器為例,其它的結構雷同。它們涉及到兩個基表:bi_ysd(驗收單),Bj_kcb(當前庫存表),前者的表結構(rq(日期),ysdh(驗收單號), bjbm(備件編碼),yssl(驗收數(shù)量),ysdj(驗收單價)),后者的表結構為(bjbm(備件編碼),dqkcl(當前庫存量),dqkcje(當前庫存金額))觸發(fā)器如下:

          create or replace trigger trig_ysd

          after insert or update or delete on bj_ysd

          for each row

          declare rq1 varchar2(8);rq2 varchar2(8);

          /*限于篇幅,yssl1,yssl2,ysdj1,ysdj2,bjbm1,bjbm2,ii聲明略*/

          if inserting or updating then

              rq1:=:new.rq;bjbm1:=:new.bjbm;yssl1:=:new.yssl;

              ysdj1:=:new.ysdj;

    select count(*) into ii from bj_dqkcb

    where bjbm=bjbm1;

              if  ii=0 then

                 insert  into  bj_dqkcb(bjbm,dqkcl,dqkcje)

                 value(bjbm1,yssl1,ysdj1);

             else

                 update bj_dqkcb

                 set dqkcl=dqkcl+yssl1;

                 dqkcje=dqkcje+yssl1*ysdj1;

             end if

          end if

          if deleting or updating then

             rq2:=:old.rq;bjbm2:=:old.bjbm;yssl2:=:old.yssl;

             ysdj2:=:old.ysdj;

             update bj_dqkcb

             set dqkcb=dqkcl-yssl2;

             dqkcje=dqkcje-yssl2*ysdj2

          end if;

         end ;

    7.結束語

        數(shù)據(jù)庫觸發(fā)器在數(shù)據(jù)庫開發(fā)、MIS開發(fā)上有很廣泛的應用,但經(jīng)驗表明,使用過多的觸發(fā)器將降低整個數(shù)據(jù)庫的性能。如果數(shù)據(jù)庫觸發(fā)器寫得不好,它會很快破壞數(shù)據(jù)庫的性能,因此,在適當?shù)臅r候使用恰當?shù)?B style="COLOR: black; BACKGROUND-COLOR: #a0ffff">觸發(fā)器顯得非常重要。

    參考文獻:

    Michael Abbey.機械工業(yè)出版社.Oracle8初學者指南,1998

    Joline Morrison.機械工業(yè)出版社.Oracle8數(shù)據(jù)庫指南,1999 

    Tile:The applications of the oracle triggers in the development of MIS

    Abstract:the paper introduces the concept and types of the oracle triggers,summarizes the applications of the oracle triggers in the MIS,and provides the examples for reference.

    Key words:oracle   trigger

    posted on 2006-02-27 13:23 TrampEagle 閱讀(481) 評論(0)  編輯  收藏 所屬分類: datebase
    主站蜘蛛池模板: 亚洲香蕉免费有线视频| 好爽…又高潮了毛片免费看| 亚洲视频欧洲视频| 国产福利在线观看免费第一福利| 亚洲精品无码少妇30P| 亚洲AV无码成人精品区大在线| 久久久久久免费一区二区三区| 亚洲第一页在线播放| 国产高清视频在线免费观看| 黄 色一级 成 人网站免费| 亚洲邪恶天堂影院在线观看| 暖暖免费高清日本一区二区三区| 国产又黄又爽又大的免费视频| 亚洲精品在线播放| 亚洲av区一区二区三| 88av免费观看| 免费国产在线精品一区| 亚洲精品福利网泷泽萝拉| 亚洲成年人啊啊aa在线观看| 日本片免费观看一区二区| 日韩在线视频线视频免费网站| 亚洲麻豆精品果冻传媒| 亚洲国产高清精品线久久| 91精品全国免费观看含羞草 | 污网站免费在线观看| 久久亚洲国产精品五月天| 日本19禁啪啪无遮挡免费动图| 可以免费观看的毛片| 国产亚洲高清在线精品不卡| 亚洲视频国产精品| 亚洲乱码无码永久不卡在线| 永久黄网站色视频免费直播| 日韩中文字幕免费视频| 特级做a爰片毛片免费看| 中国亚洲呦女专区| 久久精品国产亚洲AV高清热| 亚洲人成网亚洲欧洲无码久久| 四虎成人精品在永久免费| 亚洲免费在线视频观看| a级毛片视频免费观看| 免费人成动漫在线播放r18|