???
今天寫有關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?
?
? 觸發器功能強大,可以實現許多復雜的功能,但如果濫用會造成數據庫及應用程序的維護困難。
? (轉載請注明出處)?
?
鳳凰涅槃/浴火重生/馬不停蹄/只爭朝夕
???? 隱姓埋名/低調華麗/簡單生活/完美人生