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 不出現在儲存過程定義中。
廣告