即興的靈感

          思維是一種藝術(shù); 藝術(shù)需要靈感。

          博客好友

          最新評(píng)論

          Oracle之函數(shù)與觸發(fā)器

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

          ??? 數(shù)據(jù)庫中函數(shù)包含四個(gè)部分:聲明、返回值、函數(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ā)器是一種特殊的存儲(chǔ)過程,類似于其它編程語言中的事件函數(shù),允許為 INSERT、UPDATE、DELETE 創(chuàng)建觸發(fā)器,當(dāng)在表(視圖)中插入、更新、刪除記錄(前、后)時(shí),觸發(fā)一個(gè)或一系列 T-SQL 語句。

          ? ? 創(chuàng)建在
          STUDENT 表上的插入觸發(fā)器,當(dāng)在 STUDENT 表中插入數(shù)據(jù)時(shí)候觸發(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ā)器兩個(gè)特殊行級(jí)變量: :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時(shí)候才執(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ā)器功能強(qiáng)大,可以實(shí)現(xiàn)許多復(fù)雜的功能,但如果濫用會(huì)造成數(shù)據(jù)庫及應(yīng)用程序的維護(hù)困難。
          ? (轉(zhuǎn)載請(qǐng)注明出處)?


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

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

          評(píng)論

          # re: Oracle之函數(shù)與觸發(fā)器 2007-10-06 10:30 登高視遠(yuǎn)

          謝了,,,剛好用到  回復(fù)  更多評(píng)論   

          # re: Oracle之函數(shù)與觸發(fā)器 2007-10-06 10:31 登高視遠(yuǎn)

          觸發(fā)器原來這么好玩  回復(fù)  更多評(píng)論   

          # re: Oracle之函數(shù)與觸發(fā)器 2007-10-06 10:44 improviser

          濫用會(huì)造成數(shù)據(jù)庫及應(yīng)用程序的維護(hù)困難!!!!!!  回復(fù)  更多評(píng)論   

          # re: Oracle之函數(shù)與觸發(fā)器[未登錄] 2009-07-02 10:28

          能不能寫些關(guān)于oracle的其它語句使用如:變量如何聲明并使用, if..else語法如何使用等,多謝!  回復(fù)  更多評(píng)論   

          # re: Oracle之函數(shù)與觸發(fā)器 2010-01-22 17:39 asdf

          感謝,今天讓我解決了個(gè)大麻煩  回復(fù)  更多評(píng)論   

          主站蜘蛛池模板: 泾川县| 马鞍山市| 襄汾县| 南岸区| 枣庄市| 四子王旗| 怀安县| 南华县| 江阴市| 大新县| 黄冈市| 紫金县| 河北省| 金堂县| 湖北省| 本溪| 固阳县| 巴林右旗| 丰城市| 柏乡县| 都匀市| 长兴县| 英吉沙县| 青河县| 聂拉木县| 兴文县| 项城市| 苏尼特左旗| 嘉鱼县| 五常市| 永登县| 响水县| 隆安县| 中超| 遂溪县| 于田县| 南昌市| 唐河县| 郴州市| 高州市| 新乡市|