存儲過程是用戶定義的一系列sql語句的集合,涉及特定表或其它對象的任務,用戶能夠調用存儲過程,而函數一般是數據庫已定義的方法,它接收參數並返回某種類型的值而且不涉及特定用戶表。
存儲過程和函數存在如下幾個區別: sql
1)通常來講,存儲過程實現的功能要複雜一點,而函數的實現的功能針對性比較強。存儲過程,功能強大,能夠執行包括修改表等一系列數據庫操做;用戶定義函數不能用於執行一組修改全局數據庫狀態的操做。數據庫
2)對於存儲過程來講能夠返回參數,如記錄集,而函數只能返回值或者表對象。函數只能返回一個變量;而存儲過程能夠返回多個。存儲過程的參數能夠有IN,OUT,INOUT三種類型,而函數只能有IN類~~存儲過程聲明時不須要返回類型,而函數聲明時須要描述返回類型,且函數體中必須包含一個有效的RETURN語句。函數
3)存儲過程,能夠使用非肯定函數,不容許在用戶定義函數主體中內置非肯定函數。對象
4)存儲過程通常是做爲一個獨立的部分來執行( EXECUTE 語句執行),而函數能夠做爲查詢語句的一個部分來調用(SELECT調用),因爲函數能夠返回一個表對象,所以它能夠在查詢語句中位於FROM關鍵字的後面。 SQL語句中不可用存儲過程,而能夠使用函數。變量