2010-04-21 67 views
61

在MySQL數據庫上下文中,這三個術語有什麼區別:程序和功能與例程的區別?

  • 存儲過程;
  • 存儲程序;
  • 存儲的功能。

P.S.諸如那些日期時間函數的內建函數weekday()被認爲是什麼?

+2

相關回答:[MySQL存儲過程vs函數](http://stackoverflow.com/questions/3744209/mysql-stored-procedure-vs-function-which-would-i-use-when/13510102#13510102) ,我找到了鏈接,而我正在改進我的答案,因此鏈接:) – 2013-06-15 14:57:28

回答

68

Google是你的朋友。對於「常規的MySQL功能的過程」的第一個匹配是這樣的:http://dev.mysql.com/doc/refman/5.0/en/stored-routines-syntax.html

簡要總結:

甲存儲程序或者是一個過程或函數。

使用CALL語句調用過程,並且只能使用輸出變量傳回值。

函數可以像聲明中的其他函數一樣從一個語句中調用,並且可以返回一個標量值。 MySQL的功能和mysql程序

MYSQL功能之間

+13

雖然我同意RTFM情緒。這個答案現在被谷歌用來顯示內聯結果。 – Realistic 2016-10-11 16:51:18

27

差異

它必須返回值。 IN,OUTINOUT不能在函數中使用。但 返回數據類型必須在創建函數時聲明。函數可以從SQL語句中調用 。函數返回一個值。

MYSQL程序

返回值不是強制性的,也可以是使用了OUT參數 程序返回。可以使用IN | OUT | INOUT參數。程序 不能從SQL語句中調用。程序通過使用OUTINOUT參數返回多個 值。

29

這裏我試圖總結一下函數和程序之間的區別。

  1. 函數總是使用return語句返回一個值。 PROCEDURE可能通過參數返回一個或多個值,或者根本不返回任何值。
  2. 函數通常用於計算,其中程序通常用於執行業務邏輯。
  3. 函數僅返回1值。過程可以返回多個值(最大值1024)。
  4. 默認情況下,存儲過程總是返回零整數值。函數返回類型可以是標量或表或表值。
  5. 存儲過程有一個預編譯的執行計劃,其中函數不是。
  6. 可以通過SQL語句直接調用函數,如從雙重選擇func_name,而過程不能。
  7. 存儲過程具有安全性並減少了網絡流量,並且我們還可以調用任何沒有的存儲過程。的應用程序。
  8. 函數可以在SQL查詢中使用,而過程不能用在SQL查詢中。這會導致b/w函數和過程存在重大差異。
+0

你的第四點不正確,請更正答案 – 2017-01-12 05:35:26

0

函數必須返回一個值,但是在存儲過程中它是可選的(過程可以返回零或n值)。 函數只能有輸入參數,而程序可以有輸入/輸出參數。 函數可以從程序中調用,而程序不能從函數調用。