oracle中,存儲(chǔ)過(guò)程是一組為了完成特定功能的sql語(yǔ)句,存儲(chǔ)在數(shù)據(jù)庫(kù)中,存儲(chǔ)過(guò)程能夠反復(fù)使用,減少開發(fā)人員工作量;而觸發(fā)器是數(shù)據(jù)庫(kù)提供給程序員和數(shù)據(jù)分析員來(lái)保證數(shù)據(jù)完整性的一種方法,它是與表事件相關(guān)的特殊的存儲(chǔ)過(guò)程。
本教程操作環(huán)境:Windows7系統(tǒng)、Oracle 11g版、Dell G3電腦。
oracle中觸發(fā)器是什么
觸發(fā)器(trigger)是數(shù)據(jù)庫(kù)提供給程序員和數(shù)據(jù)分析員來(lái)保證數(shù)據(jù)完整性的一種方法,它是與表事件相關(guān)的特殊的存儲(chǔ)過(guò)程。由事件觸發(fā)。
觸發(fā)器在觸發(fā)一定事件的時(shí)候隱式執(zhí)行的一段sql語(yǔ)句,觸發(fā)器不能接收參數(shù)。Oracle觸發(fā)器則是觸發(fā)Oracle數(shù)據(jù)庫(kù)中對(duì)數(shù)據(jù)庫(kù)進(jìn)行insert、update、delete操作或?qū)σ晥D進(jìn)行類似的操作,還有一些系統(tǒng)的事件,比如數(shù)據(jù)庫(kù)的關(guān)閉或開啟。
觸發(fā)器的分類有哪些?
(1)、數(shù)據(jù)操縱語(yǔ)言(DML)觸發(fā)器:創(chuàng)建在表上,有DML時(shí)間來(lái)觸發(fā)的觸發(fā)器;
(2)、替代(instead of)觸發(fā)器:創(chuàng)建在視圖上,用來(lái)替換對(duì)視圖進(jìn)行添加、修改和刪除操作。
(3)、數(shù)據(jù)定義語(yǔ)言(DDL)觸發(fā)器:定義在模式上,觸發(fā)事件是對(duì)數(shù)據(jù)庫(kù)對(duì)象的創(chuàng)建和修改操作。
(4)、數(shù)據(jù)庫(kù)系統(tǒng)觸發(fā)器:定義在整個(gè)數(shù)據(jù)庫(kù)上,觸發(fā)的時(shí)間是數(shù)據(jù)庫(kù)的操作,比如數(shù)據(jù)庫(kù)的啟動(dòng)和關(guān)閉。
觸發(fā)器的組成部分有哪些?
(1)、觸發(fā)的事件:即在何種情況下觸發(fā)trigger,例如:insert、update、delete。
(2)、觸發(fā)的時(shí)間:即該trigger是在觸發(fā)事件之前(before)還是在觸發(fā)事件之后(after),也是觸發(fā)的事件和該trigger主體的先后順序。
(3)、觸發(fā)器本身:即觸發(fā)器在觸發(fā)事件的時(shí)候要執(zhí)行的操作,例如:pl/sql塊。
(4)、觸發(fā)的頻率:說(shuō)明該觸發(fā)器內(nèi)定義的動(dòng)作被執(zhí)行的次數(shù)。即語(yǔ)句級(jí)觸發(fā)器和行級(jí)觸發(fā)器。語(yǔ)句級(jí)觸發(fā)器是指當(dāng)某個(gè)事件發(fā)生時(shí),該觸發(fā)器只執(zhí)行一次。而行級(jí)觸發(fā)器,在某個(gè)事件發(fā)生時(shí),對(duì)受到該操作影響的每一行數(shù)據(jù),都會(huì)單獨(dú)執(zhí)行一次觸發(fā)器。
oracle中存儲(chǔ)過(guò)程是什么
存儲(chǔ)過(guò)程(Stored Procedure)是在大型數(shù)據(jù)庫(kù)系統(tǒng)中,一組為了完成特定功能的SQL 語(yǔ)句集,存儲(chǔ)在數(shù)據(jù)庫(kù)中,經(jīng)過(guò)第一次編譯后再次調(diào)用不需要再次編譯,用戶通過(guò)指定存儲(chǔ)過(guò)程的名字并給出參數(shù)(如果該存儲(chǔ)過(guò)程帶有參數(shù))來(lái)調(diào)用存儲(chǔ)過(guò)程。
簡(jiǎn)單的說(shuō)就是專門干一件事一段sql語(yǔ)句。
存儲(chǔ)過(guò)程能夠反復(fù)使用,減少開發(fā)人員工作量。
在oracle數(shù)據(jù)庫(kù)中存儲(chǔ)過(guò)程是procedure。
為什么要寫存儲(chǔ)過(guò)程
1.效率高
存儲(chǔ)過(guò)程編譯一次后,就會(huì)存到數(shù)據(jù)庫(kù),每次調(diào)用時(shí)都直接執(zhí)行。而普通的sql語(yǔ)句我們要保存到其他地方(例如:記事本 上),都要先分析編譯才會(huì)執(zhí)行。所以想對(duì)而言存儲(chǔ)過(guò)程效率更高。
2.降低網(wǎng)絡(luò)流量
存儲(chǔ)過(guò)程編譯好會(huì)放在數(shù)據(jù)庫(kù),我們?cè)谶h(yuǎn)程調(diào)用時(shí),不會(huì)傳輸大量的字符串類型的sql語(yǔ)句。
3.復(fù)用性高
存儲(chǔ)過(guò)程往往是針對(duì)一個(gè)特定的功能編寫的,當(dāng)再需要完成這個(gè)特定的功能時(shí),可以再次調(diào)用該存儲(chǔ)過(guò)程。
4.可維護(hù)性高
當(dāng)功能要求發(fā)生小的變化時(shí),修改之前的存儲(chǔ)過(guò)程比較容易,花費(fèi)精力少。
5.安全性高
完成某個(gè)特定功能的存儲(chǔ)過(guò)程一般只有特定的用戶可以使用,具有使用身份限制,更安全。
推薦教程:《Oracle教程》