???
今天寫有關(guān)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ā)器,當(dāng)在表(視圖)中插入、更新、刪除記錄(前、后)時,觸發(fā)一個或一系列 T-SQL 語句。
? ? 創(chuàng)建在
STUDENT
表上的插入觸發(fā)器,當(dāng)在
STUDENT
表中插入數(shù)據(jù)時候觸發(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ā)器兩個特殊行級變量:
: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時候才執(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)大,可以實現(xiàn)許多復(fù)雜的功能,但如果濫用會造成數(shù)據(jù)庫及應(yīng)用程序的維護(hù)困難。
? (轉(zhuǎn)載請注明出處)?
?
鳳凰涅槃/浴火重生/馬不停蹄/只爭朝夕
???? 隱姓埋名/低調(diào)華麗/簡單生活/完美人生