即興的靈感

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

          博客好友

          最新評論

          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 閱讀(3323) 評論(5)  編輯  收藏 所屬分類: Oracle

          評論

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

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

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

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

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

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

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

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

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

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

          主站蜘蛛池模板: 建始县| 平泉县| 迁安市| 纳雍县| 吉首市| 仙游县| 卓尼县| 湖口县| 焉耆| 华蓥市| 固安县| 文昌市| 南涧| 淅川县| 喜德县| 汾阳市| 镇宁| 枣强县| 乌鲁木齐县| 沙洋县| 宣化县| 郓城县| 河池市| 临猗县| 盘锦市| 东台市| 浏阳市| 肥西县| 古交市| 黄平县| 镇平县| 板桥市| 安顺市| 海盐县| 崇信县| 聊城市| 浪卡子县| 宿州市| 萨迦县| 吉木乃县| 肥西县|