posts - 60,comments - 71,trackbacks - 0
          本文來自:http://www.aygfsteel.com/improviser/archive/2007/10/05/150456.html

          今天寫有關(guān)Oracle中函數(shù)與觸發(fā)器的內(nèi)容,在數(shù)據(jù)庫中定義并使用存儲過程、函數(shù)、觸發(fā)器,可以提高用戶訪問數(shù)據(jù)庫的效率。

              數(shù)據(jù)庫中函數(shù)包含四個部分:聲明、返回值、函數(shù)體和異常處理
           1 create or replace function getname(sno varchar2)
           2  return varchar is
           3         name varchar(12);
           4  begin
           5         select ename into name from emp where empno=sno;
           6         return name;
           7  exception
           8        ...
          12  end;
          13 

             觸發(fā)器是一種特殊的存儲過程,類似于其它編程語言中的事件函數(shù),允許為 INSERT、UPDATE、DELETE 創(chuàng)建觸發(fā)器,當(dāng)在表(視圖)中插入、更新、刪除記錄(前、后)時,觸發(fā)一個或一系列 T-SQL 語句。

              創(chuàng)建在
          STUDENT表上的插入觸發(fā)器,當(dāng)在STUDENT表中插入數(shù)據(jù)時候觸發(fā)器將被觸發(fā),執(zhí)行體將被執(zhí)行
             插入觸發(fā)器
           1
           create or replace trigger tg_insert
           2  before insert on student                --可設(shè)置在插入前或插入后
           3  begin
           4        ...
           5  end;
           

             更新觸發(fā)器
           8  create or replace trigger tg_update
           9  after update on student
          10  for each row
          12  begin
          13      ...
          14  END;
          15 

          觸發(fā)器兩個特殊行級變量: :New新值  :Old舊值 分別代表更新值,被更新的值

           1 create or replace trigger tg_insert
           2 after update on student
           3 for each row
           4 when (:old.sex=’j’)        --當(dāng)old.sex為J時候才執(zhí)行觸發(fā)器內(nèi)容
           5 begin
           7    DBMS_OUTPUT.PUT_LINE(:new.stuname||'  '||:old.stuname);
           8    DBMS_OUTPUT.PUT_LINE(:new.sex||'  '||:old.sex);
           9 end;
          10 

          判斷復(fù)合型觸發(fā)器

           1 create or replace trigger trgstudeng
           2 before insert or update or delete on student
           3 for each row
           4 begin
           5     if  inserting then
           6     ...
           8     end if;
           9     if deleting then
          10     ...
          12     end if;
          13 exception
          14     ...
          16 END;
          17 

             觸發(fā)器功能強大,可以實現(xiàn)許多復(fù)雜的功能,但如果濫用會造成數(shù)據(jù)庫及應(yīng)用程序的維護困難。
          posted on 2008-06-18 17:23 henry1451 閱讀(281) 評論(0)  編輯  收藏 所屬分類: Oracle技術(shù)
          主站蜘蛛池模板: 扬中市| 鹤庆县| 阳原县| 葫芦岛市| 房产| 巴林右旗| 德昌县| 道孚县| 常宁市| 南陵县| 九寨沟县| 招远市| 新沂市| 盘山县| 玉门市| 潮州市| 桑植县| 乐亭县| 双流县| 正定县| 木兰县| 仁布县| 集安市| 三门县| 昭平县| 南投市| 阿克| 霞浦县| 济阳县| 江永县| 云梦县| 陆河县| 沂水县| 平顶山市| 新竹市| 岳普湖县| 社会| 安西县| 博白县| 石家庄市| 元朗区|