存儲過程與函數的區別與聯系


一、函數

  函數與存儲過程相似,也是數據庫中存儲的已命名PL-SQL程序塊。函數的主要特征是它必須有一個返回值。通過return來指定函數的返回類型。在函數的任何地方可以通過return expression語句從函數返回,返回類型必須和聲明的返回類型一致。

二、函數和存儲過程的優點:

  1、共同使用的代碼可以只需要被編寫一次,而被需要該代碼的任何應用程序調用(.net,c++,java,也可以使DLL庫)。

  2、這種幾種編寫、幾種維護更新、大家共享的方法,簡化了應用程序的開發維護,提高了效率和性能。

  3、這種模塊化的方法使得一個復雜的問題、大的程序逐步簡化成幾個簡單的、小的程序部分,進行分別編寫,因此程序的結構更加清晰,簡單,也容易實現。

  4、可以在各個開發者之間提供處理數據、控制流程、提示信息等方面的一致性。

  5、節省內存空間。它們以一種壓縮的形式被存儲在外存中,當被調用時才被放入內存進行處理。而且多個用戶在調用同一個存儲過程或函數時,只需要加載一次即可。

  6、提高數據的安全性和完整性。通過把一些對數據的操作方到存儲過程或函數中,就可以通過是否授予用戶有執行該語句的權限,來限制某些用戶對數據庫進行這些操作。

三、函數和存儲過程的區別:

  1、存儲過程用戶在數據庫中完成特定操作或者任務(如插入,刪除等),函數用於返回特定的數據

  2、存儲過程聲明用procedure,函數用function。

  3、存儲過程不需要返回類型,函數必須要返回類型

  4、存儲過程可作為獨立的pl-sql執行,函數不能作為獨立的plsql執行,必須作為表達式的一部分。

  5、存儲過程只能通過out和in/out來返回值,函數除了可以使用out,in/out以外,還可以使用return返回值。

  6、sql語句(DML或SELECT)中不可用調用存儲過程,而函數可以。

四、適用場合:

  1、如果需要返回多個值和不返回值,就使用存儲過程;如果只需要返回一個值,就使用函數

  2、存儲過程一般用於執行一個指定的動作函數一般用於計算和返回一個值。

  3、可以再SQL內部調用函數來完成復雜的計算問題,但不能調用存儲過程。

五、存儲過程與存儲函數的區別和聯系

  相同點:1.創建語法結構相似,都可以攜帶多個傳入參數和傳出參數。

          2.都是一次編譯,多次執行。

  不同點:1.存儲過程定義關鍵字用procedure,函數定義用function

      2.存儲過程中不能用return返回值,但函數中可以,而且函數中必須有return子句

      3.執行方式略有不同,存儲過程的執行方式有兩種(1.使用execute2.使用begin和end),函數除了存儲過程的兩種方式外,還可以當做表達式使用,例如放在select中(select f1() form dual;)。

總結:如果只有一個返回值,用存儲函數,否則,一般用存儲過程。


免責聲明!

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



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