| 5.7.1 數(shù)據(jù)庫存儲過程與函數(shù) | | |
1.緣由 (1)現(xiàn)在數(shù)據(jù)庫系統(tǒng)往往采用客戶機(jī)/服務(wù)器計算模式,很多工作可以在客戶端完成,也可以在服務(wù)器端完成。 (2)客戶機(jī)/服務(wù)器系統(tǒng)與傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)的一個很重要的區(qū)別是:在傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)中只存放數(shù)據(jù),所有的應(yīng)用程序都在用戶端,都與用戶實際運(yùn)行的應(yīng)用程序捆綁在一起;而在客戶機(jī)/服務(wù)器系統(tǒng)中,在數(shù)據(jù)庫中還存放程序,由于這種程序以數(shù)據(jù)庫對象的形式存儲在數(shù)據(jù)庫中,因此稱為存儲過程。 (3)存儲過程是使用SQL語句和流程控制語句編寫的模塊,存儲過程經(jīng)編譯和優(yōu)化后存儲在數(shù)據(jù)庫服務(wù)器端的數(shù)據(jù)庫中,使用時調(diào)用即可。 |
2.使用存儲過程的優(yōu)點(diǎn) (1)提高運(yùn)行速度 在運(yùn)行存儲過程前,數(shù)據(jù)庫服務(wù)器對其進(jìn)行語法和語義分析,并給出優(yōu)化執(zhí)行方案 而調(diào)用存儲過程時,其執(zhí)行SQL語句的大部分準(zhǔn)備工作已經(jīng)完成,所以存儲過程能以很快的速度執(zhí)行 相比之下,交互執(zhí)行的SQL語句是解釋執(zhí)行的,所以其速度較慢 (2)增強(qiáng)了SQL的功能和靈活性 存儲過程可以用流程控制語句編寫,有很強(qiáng)的靈活性 能完成復(fù)雜的邏輯判斷和復(fù)雜的運(yùn)算 (3)可以降低網(wǎng)絡(luò)的通信量 存儲過程存儲在服務(wù)器端 執(zhí)行全部邏輯流程僅需要向服務(wù)器發(fā)送一次過程請求即可 避免了交互模式下處理邏輯執(zhí)行中額外的中間通信開銷 (4)減輕了程序編寫的工作量 存儲過程可以反復(fù)調(diào)用 并可供其它前端應(yīng)用程序共享應(yīng)用邏輯 (5)間接實現(xiàn)安全控制功能 若不允許某些用戶直接在表和視圖上進(jìn)行查詢 但可授權(quán)他們執(zhí)行某個存儲過程來完成允許范圍內(nèi)的信息查詢 |
3.聲明存儲過程的一般形式 (1)申明存儲過程 CREATE PROCEDURE <過程名> (<參數(shù)>) <局部聲明> <過程體>; (2)申明函數(shù) CREATE FUNCTION <函數(shù)名> (<參數(shù)>) RETURNS <返回類型> <局部聲明> <函數(shù)體>; (3)調(diào)用語句的形式 CALL <過程名> (<參數(shù)列表>); |