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

          今天寫有關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ā)器,當在表(視圖)中插入、更新、刪除記錄(前、后)時,觸發(fā)一個或一系列 T-SQL 語句。

              創(chuàng)建在
          STUDENT表上的插入觸發(fā)器,當在STUDENT表中插入數(shù)據(jù)時候觸發(fā)器將被觸發(fā),執(zhí)行體將被執(zhí)行
             插入觸發(fā)器
           1
           create or replace trigger tg_insert
           2  before insert on student                --可設置在插入前或插入后
           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’)        --當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ā)器

           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)許多復雜的功能,但如果濫用會造成數(shù)據(jù)庫及應用程序的維護困難。
          posted on 2008-06-18 17:23 henry1451 閱讀(285) 評論(0)  編輯  收藏 所屬分類: Oracle技術
          主站蜘蛛池模板: 台湾省| 中西区| 崇信县| 湟中县| 重庆市| 湖北省| 宁武县| 吉木乃县| 洪洞县| 乡宁县| 凌海市| 台州市| 酒泉市| 腾冲县| 淮滨县| 昭平县| 乳山市| 稷山县| 永靖县| 西峡县| 台中市| 神农架林区| 金塔县| 石城县| 拜城县| 江北区| 建始县| 阿拉善右旗| 嘉祥县| 金堂县| 霍林郭勒市| 姚安县| 济源市| 聂荣县| 太保市| 台湾省| 尖扎县| 洛南县| 澄迈县| 孝昌县| 佳木斯市|