一、函數
函數與存儲過程相似,也是數據庫中存儲的已命名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;)。
總結:如果只有一個返回值,用存儲函數,否則,一般用存儲過程。