存儲過程概念
存儲過程是一些sql語句和控制語句組成的被封裝起來的過程,它駐留在數據庫中,可以被客戶應用程序通過存儲過程名字調用,也可以從另一個存儲過程或觸發器調用。
它的參數可以被傳遞和返回,與應用程序中的函數過程類似,存儲過程可以通過名字來調用,具有輸入參數和輸出參數。
存儲過程分類
1) 返回記錄集的存儲過程 ----從數據庫返回符合一個或幾個條件的記錄
2) 返回數值的存儲過程(標量存儲過程)----在數據庫執行一個有返回值的函數或命令
3) 行爲存儲過程 -----在數據庫中的更新和刪除操作
爲什麼要是用存儲過程?
(1)執行速度快——存儲過程只在創建時進行編譯,以後每次執行存儲過程都不需要重新編譯,而一般SQL語句沒執行一次就需編譯一次,所以使用存儲過程可提高數據庫的執行速度。
(2)減少網絡通信量——當對數據庫進行復雜操作時,(如對多個表進行insert、update、select、delete時)可將這些複雜操作用存儲過程封裝起來與數據庫提供的事務處理結合一起使用。這些操作,如果用程序完成就是多條SQL語句,可能要多次連接數據庫,而換成存儲過程只需一次連接。
(3)更強的適應性與複用性——存儲過程可以重複使用,提高了可重用性,減少數據庫開發人員的工作量。
(4)可維護性高——更新存儲過程通常比更改、測試以及重新部署程序集需要較少的時間和精力。
(5)安全性高,可設定只有某用戶才能對指定存儲過程的使用權,且存儲過程比多條sql穩定,只要數據庫不出現問題,基本上是不會出現什麼問題的。
(6)分佈式工作——應用程序和數據庫的編碼工作可以單獨進行,減少耦合度。
(7)更好的版本控制,通過svn等源代碼控制工具可以輕鬆恢復或引用舊版本的存儲過程。
存儲過程的缺點
(1)開發調試差:無良好的IDE開發工具,存儲過程的調試比一般SQL要複雜的多。
(2)可移植性差:由於存儲過程將應用程序綁定到數據庫上,因此使用存儲過程封裝業務邏輯將限制應用程序的可移植性。
(3)重新編譯問題,因爲後端代碼是運行前編譯的,如果帶有引用關係的對象發生改變時,受影響的存儲過程、包將需要重新編譯(不過也可以設置成運行時刻自動編譯)。
(4)如果在一個程序系統中大量的使用存儲過程,到程序交付使用的時候隨着用戶需求的增加會導致數據結構的變化,接着就是系統的相關問題了,最後如果用戶想維護該系統可以說是很難很難、而且代價是空前的,維護起來更麻煩。