Oracle存储过程procedure与函数function区别
存儲過程(Stored Procedure )是一組為了完成特定功能的SQL 語句集,經編譯后存儲在數據庫中。用戶通過指定存儲過程的名字并給出參數(如果該存儲過程
帶有參數)來執行它。
存儲過程是數據庫中的一個重要對象,任何一個設計良好的數據庫應用程序都應該用到存儲過程。
存儲過程是由流控制和SQL 語句書寫的過程,這個過程經編譯和優化后存儲在數據庫服務器中,應用程序使用時只要調用即可。
在Oracle?中,若干個有聯系的過程可以組合在一起構成程序包。
優 點:
1. 存儲過程只在創造時進行編譯,以后每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高數據庫執行速度。
2.當對數據庫進行復雜操作時(如對多個表進行Update、Insert、Query、Delete時),可將此復雜操作用存儲過程封裝起來與數據庫提供的事務處理結合一起使用。
3.存儲過程可以重復使用,可減少數據庫開發人員的工作量。
4.安全性高,可設定只有某用戶才具有對指定存儲過程的使用權。
存儲過程與函數的對比
存儲過程的優缺點
優點:減少網絡交互的成本。
缺點:
a、不可移植性,每種數據庫的內部編程語法都不太相同,當你的系統需要兼容多種數據庫時,最好不要用存儲過程。
b、學習成本高,DBA一般都擅長寫存儲過程,但并不是每個程序員都能寫好存儲過程,除非你的團隊有較多的開發人員熟悉寫存儲過程,否則后期系統維護會產生問題。
c、業務邏輯多處存在,采用存儲過程后也就意味著你的系統有一些業務邏輯不是在應用程序里處理,這種架構會增加一些系統維護和調試成本。
d、存儲過程和常用應用程序語言不一樣,它支持的函數及語法有可能不能滿足需求,有些邏輯就只能通過應用程序處理。
e、如果存儲過程中有復雜運算的話,會增加一些數據庫服務端的處理成本,對于集中式數據庫可能會導致系統可擴展性問題。
f、為了提高性能,數據庫會把存儲過程代碼編譯成中間運行代碼(類似于Java的class文件),所以更像靜態語言。當存儲過程引用的對像(表、視圖等等)結構改變后,
存儲過程需要重新編譯才能生效,在24*7高并發應用場景,一般都是在線變更結構的,所以在變更的瞬間要同時編譯存儲過程,這可能會導致數據庫瞬間壓力上升引起故障(oracle數據庫就存在這樣的問題)。
總結
以上是生活随笔為你收集整理的Oracle存储过程procedure与函数function区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库隔离级别---MySQL的默认隔离
- 下一篇: Java微信公众号开发面试题