SQL存儲(chǔ)過(guò)程的功能
SQL存儲(chǔ)過(guò)程使我們?cè)谑褂?a >SQL數(shù)據(jù)庫(kù)時(shí)經(jīng)??梢杂玫降?,下面就讓我們來(lái)一起了解一下SQL存儲(chǔ)過(guò)程都能帶來(lái)什么樣的好處。
SQL存儲(chǔ)過(guò)程(Stored Procedure)是一組為了完成特定功能的SQL語(yǔ)句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中。用戶(hù)通過(guò)指定存儲(chǔ)過(guò)程的名字并給出參數(shù)(如果該存儲(chǔ)過(guò)程帶有參數(shù))來(lái)執(zhí)行它。存儲(chǔ)過(guò)程是數(shù)據(jù)庫(kù)中的一個(gè)重要對(duì)象,任何一個(gè)設(shè)計(jì)良好的數(shù)據(jù)庫(kù)應(yīng)用程序都應(yīng)該用到存儲(chǔ)過(guò)程。
* SQL存儲(chǔ)過(guò)程的能力大大增強(qiáng)了SQL語(yǔ)言的功能和靈活性。存儲(chǔ)過(guò)程可以用流控制語(yǔ)句編寫(xiě),有很強(qiáng)的靈活性,可以完成復(fù)雜的判斷和較復(fù)雜的 運(yùn)算。
* 可保證數(shù)據(jù)的安全性和完整性。
# 通過(guò)存儲(chǔ)過(guò)程可以使沒(méi)有權(quán)限的用戶(hù)在控制之下間接地存取數(shù)據(jù)庫(kù),從而保證數(shù)據(jù)的安全。
# 通過(guò)SQL存儲(chǔ)過(guò)程可以使相關(guān)的動(dòng)作在一起發(fā)生,從而可以維護(hù)數(shù)據(jù)庫(kù)的完整性。
* 在運(yùn)行存儲(chǔ)過(guò)程前,數(shù)據(jù)庫(kù)已對(duì)其進(jìn)行了語(yǔ)法和句法分析,并給出了優(yōu)化執(zhí)行方案。這種已經(jīng)編譯好的過(guò)程可極大地改善SQL語(yǔ)句的性能。由于執(zhí)行SQL語(yǔ)句的大部分工作已經(jīng)完成,所以存儲(chǔ)過(guò)程能以極快的速度執(zhí)行。
* 可以降低網(wǎng)絡(luò)的通信量。
* 使體現(xiàn)企業(yè)規(guī)則的運(yùn)算程序放入數(shù)據(jù)庫(kù)服務(wù)器中,以便:
# 集中控制。
# 當(dāng)企業(yè)規(guī)則發(fā)生變化時(shí)在服務(wù)器中改變存儲(chǔ)過(guò)程即可,無(wú)須修改任何應(yīng)用程序。企業(yè)規(guī)則的特點(diǎn)是要經(jīng)常變化,如果把體現(xiàn)企業(yè)規(guī)則的運(yùn)算程序放入應(yīng)用程序中,則當(dāng)企業(yè)規(guī)則發(fā)生變化時(shí),就需要修改應(yīng)用程序工作量非常之大(修改、發(fā)行和安裝應(yīng)用程序)。如果把體現(xiàn)企業(yè)規(guī)則的運(yùn)算放入存儲(chǔ)過(guò)程中,則當(dāng)企業(yè)規(guī)則發(fā)生變化時(shí),只要修改存儲(chǔ)過(guò)程就可以了,應(yīng)用程序無(wú)須任何變化。
- Create proc[edure] procedue_name
- [@parameter data_type][output]
- [with]{recompile|encryption}
- as
- sql_statement
解釋?zhuān)?br />
output:表示此參數(shù)是可傳回的
with {recompile|encryption}
recompile:表示每次執(zhí)行此存儲(chǔ)過(guò)程時(shí)都重新編譯一次
encryption:所創(chuàng)建的存儲(chǔ)過(guò)程的內(nèi)容會(huì)被加密
如:
表book的內(nèi)容如下
編號(hào) 書(shū)名 價(jià)格
001 C語(yǔ)言入門(mén) $30
002 PowerBuilder報(bào)表開(kāi)發(fā) $52
實(shí)例1:查詢(xún)表Book的內(nèi)容的存儲(chǔ)過(guò)程
- create proc query_book
- as
- select * from book
- go
- exec query_book
實(shí)例2:
加入一筆記錄到表book,并查詢(xún)此表中所有書(shū)籍的總金額
- Create proc insert_book
- @param1 char(10),@param2 varchar(20),@param3 money,@param4 money output
- with encryption ---------加密
- as
- insert book(編號(hào),書(shū)名,價(jià)格) Values(@param1,@param2,@param3)
- select @param4=sum(價(jià)格) from book
- go
執(zhí)行例子:
- declare @total_price money
- exec insert_book '003','Delphi 控件開(kāi)發(fā)指南',$100,@total_price
- print '總金額為'+convert(varchar,@total_price)
- go
SQL存儲(chǔ)過(guò)程的3種傳回值:
1)、以Return傳回整數(shù)
2)、以output格式傳回參數(shù)
3)、Recordset
【編輯推薦】
oracle數(shù)據(jù)導(dǎo)入SQL數(shù)據(jù)庫(kù)的方法
SQL Server級(jí)聯(lián)更新的實(shí)現(xiàn)
SQL刪除所有表數(shù)據(jù)的實(shí)現(xiàn)方法
Oracle查詢(xún)轉(zhuǎn)換為SQL查詢(xún)中列的選擇