Oracle之函數(shù)與觸發(fā)器
??? 數(shù)據(jù)庫中函數(shù)包含四個(gè)部分:聲明、返回值、函數(shù)體和異常處理。
?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í)行
?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 舊值 ? 分別代表更新值,被更新的值
?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ā)器
?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