即興的靈感

          思維是一種藝術; 藝術需要靈感。

          導航

          公告

           覺悟微智能 白米飯自媒體

          留言簿(29)

          隨筆分類

          隨筆檔案

          相冊

          閱讀排行榜

          評論排行榜

          博客好友

          最新評論

          Oracle之函數與觸發器

          ??? 今天寫有關Oracle中函數與觸發器的內容,在數據庫中定義并使用存儲過程、函數、觸發器,可以提高用戶訪問數據庫的效率。

          ??? 數據庫中函數包含四個部分:聲明、返回值、函數體和異常處理

          ?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?

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

          ? ? 創建在
          STUDENT 表上的插入觸發器,當在 STUDENT 表中插入數據時候觸發器將被觸發,執行體將被執行
          ?? 插入觸發器
          ?1
          ?create?or?replace?trigger
          ?tg_insert
          ?2??before?insert?on?student??????????????? --
          可設置在插入前或插入后
          ?3??begin

          ?4??????? ...
          ?5??end ;
          ?

          ??
          更新觸發器
          ?8? create?or?replace?trigger
          ?tg_update
          ?9??after?update?on
          ?student
          10??for?each?row

          12??begin
          13????? ...
          14??END ;
          15?

          觸發器兩個特殊行級變量: :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時候才執行觸發器內容
          ?5?begin

          ?7????DBMS_OUTPUT.PUT_LINE(:new.stuname||'??'|| :old.stuname);
          ?8????DBMS_OUTPUT.PUT_LINE(:new.sex||'??'||
          :old.sex);
          ?9?end
          ;
          10?

          判斷復合型觸發器

          ?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?

          ? ? 觸發器功能強大,可以實現許多復雜的功能,但如果濫用會造成數據庫及應用程序的維護困難。
          ? (轉載請注明出處)?


          ?
          鳳凰涅槃/浴火重生/馬不停蹄/只爭朝夕
          ???? 隱姓埋名/低調華麗/簡單生活/完美人生

          posted on 2007-10-05 00:04 poetguo 閱讀(3339) 評論(5)  編輯  收藏 所屬分類: Oracle

          評論

          # re: Oracle之函數與觸發器 2007-10-06 10:30 登高視遠

          謝了,,,剛好用到  回復  更多評論   

          # re: Oracle之函數與觸發器 2007-10-06 10:31 登高視遠

          觸發器原來這么好玩  回復  更多評論   

          # re: Oracle之函數與觸發器 2007-10-06 10:44 improviser

          濫用會造成數據庫及應用程序的維護困難?。。。。。?nbsp; 回復  更多評論   

          # re: Oracle之函數與觸發器[未登錄] 2009-07-02 10:28

          能不能寫些關于oracle的其它語句使用如:變量如何聲明并使用, if..else語法如何使用等,多謝!  回復  更多評論   

          # re: Oracle之函數與觸發器 2010-01-22 17:39 asdf

          感謝,今天讓我解決了個大麻煩  回復  更多評論   

          主站蜘蛛池模板: 宕昌县| 星座| 许昌县| 石渠县| 安阳县| 佛学| 监利县| 曲水县| 文水县| 固始县| 泗水县| 长垣县| 千阳县| 常宁市| 郁南县| 宜丰县| 宜州市| 衡南县| 获嘉县| 平顺县| 盐亭县| 安图县| 商洛市| 绍兴县| 抚松县| 南和县| 淳化县| 仪征市| 建水县| 巴林右旗| 甘谷县| 建瓯市| 仁怀市| 台北县| 齐齐哈尔市| 雅安市| 平昌县| 福贡县| 冀州市| 嘉定区| 陈巴尔虎旗|