MySQL 函式和儲存過程之間最顯著的區別是什麼?


儲存過程和函式之間最顯著的區別在於它們的呼叫方式和用途不同。除此之外,儲存過程和函式之間還有以下區別:

  • 儲存過程不返回值。它透過 CALL 語句呼叫來執行操作,例如修改表或處理檢索到的記錄。

    另一方面,函式在表示式中呼叫,並直接將單個值返回給呼叫者,在表示式中使用。也就是說,函式在表示式中的使用方式與常量、內建函式或表列引用相同。

  • 我們不能用 CALL 語句呼叫函式。我們不能在表示式中呼叫儲存過程。

  • 例程建立的語法在儲存過程和函式中略有不同,如下所示:

CREATE
   [DEFINER = { user | CURRENT_USER }]
   PROCEDURE sp_name ([proc_parameter[,...]])
   [characteristic ...] routine_body

CREATE
   [DEFINER = { user | CURRENT_USER }]
   FUNCTION sp_name ([func_parameter[,...]])
   RETURNS type
   [characteristic ...] routine_body

proc_parameter:
   [ IN | OUT | INOUT ] param_name type

func_parameter:
   param_name type

type:
   Any valid MySQL data type

characteristic:
   COMMENT 'string'
   | LANGUAGE SQL
   | [NOT] DETERMINISTIC
   | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
   | SQL SECURITY { DEFINER | INVOKER }

routine_body:
   Valid SQL routine statement
  • 儲存過程引數可以定義為僅輸入、僅輸出或同時輸入和輸出。這意味著儲存過程可以透過輸出引數將值傳遞迴呼叫者。這些值可以在 CALL 語句後的語句中訪問。

    另一方面,函式只有輸入引數。因此,儘管儲存過程和函式都可以有引數,但儲存過程引數的宣告語法與函式不同。

  • 函式返回值,因此函式定義中必須有 RETURNS 子句來指示返回值的資料型別。此外,函式體中必須至少有一個 RETURN 語句將值返回給呼叫者。

    另一方面,RETURNS 和 RETURN 不出現在儲存過程定義中。

更新於:2020年6月22日

4K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告