SQL中存儲過程與自定義函數的區別


存儲過程

存儲過程(Stored Procedure)是在大型 數據庫系統中,一組為了完成特定功能的SQL 語句集,存儲在數據庫中,經過第一次編譯后再次調用不需要再次編譯,用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是數據庫中的一個重要對象,任何一個設計良好的數據庫應用程序都應該用到存儲過程。
  
優點
①重復使用。存儲過程可以重復使用,從而可以減少數據庫開發人員的工作量。
②提高性能。存儲過程在創建的時候在進行了編譯,將來使用的時候不再重新翻譯。一般的SQL語句每執行一次就需要編譯一次,所以使用存儲過程提高了效率。
③減少網絡流量。存儲過程位於服務器上,調用的時候只需要傳遞存儲過程的名稱以及參數就可以了,因此降低了網絡傳輸的數據量。
④安全性。參數化的存儲過程可以防止SQL注入式攻擊,而且可以將Grant、Deny以及Revoke權限應用於存儲過程。
缺點
1:調試麻煩,但是用 PL/SQL Developer 調試很方便!彌補這個缺點。
2:移植問題,數據庫端代碼當然是與數據庫相關的。但是如果是做工程型項目,基本不存在移植問題。
3:重新編譯問題,因為后端代碼是運行前編譯的,如果帶有引用關系的對象發生改變時,受影響的存儲過程、包將需要重新編譯(不過也可以設置成運行時刻自動編譯)。
4: 如果在一個程序系統中大量的使用存儲過程,到程序交付使用的時候隨着用戶需求的增加會導致數據結構的變化,接着就是系統的相關問題了,最后如果用戶想維護該系統可以說是很難很難、而且代價是空前的,維護起來更麻煩。
 
用戶定義函數:

 Microsoft SQL Server 2000 允許創建用戶定義函數。與任何函數一樣,用戶定義函數是可返回值的例程。根據所返回值的類型,每個用戶定義函數可分成以下三個類別:

    1、返回可更新數據表的函數:如果用戶定義函數包含單個 Select 語句且該語句可更新,則該函數返回的表格格式結果也可以更新。

    2、返回不可更新數據表的函數:如果用戶定義函數包含不止一個 Select 語句,或包含一個不可更新的 Select 語句,則該函數返回的表格格式結果也不可更新。

    3、返回標量值的函數:用戶定義函數可以返回標量值。

自定義函數優缺點

1. 諸多限制,有許多語句不能使用,許多功能不能實現

2. 可以直接引用返回值

3. 用表變量返回記錄集

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM