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