Sự khác biệt đáng kể nhất giữa các thủ tục và hàm là chúng được gọi khác nhau và cho các mục đích khác nhau. Ngoài ra, sau đây là sự khác biệt giữa thủ tục và chức năng -
-
Một thủ tục không trả về một giá trị. Thay vào đó, nó được gọi bằng câu lệnh CALL để thực hiện một thao tác như sửa đổi bảng hoặc xử lý các bản ghi đã truy xuất.
Mặt khác, một hàm được gọi trong một biểu thức và trả về một giá trị duy nhất trực tiếp cho người gọi sẽ được sử dụng trong biểu thức. Nghĩa là, một hàm được sử dụng trong các biểu thức giống như một hằng số, một hàm dựng sẵn hoặc một tham chiếu đến một cột trong bảng.
-
Chúng ta không thể gọi một hàm bằng câu lệnh CALL. Chúng ta không thể gọi một thủ tục trong một biểu thức.
-
Cú pháp để tạo quy trình hơi khác với các thủ tục và hàm như sau -
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
-
Các tham số thủ tục có thể được định nghĩa là chỉ đầu vào, chỉ đầu ra hoặc cho cả đầu vào và đầu ra. Điều này có nghĩa là một thủ tục có thể chuyển các giá trị trở lại trình gọi bằng cách sử dụng các tham số đầu ra. Các giá trị này có thể được truy cập trong các câu lệnh theo sau câu lệnh CALL.
Mặt khác, các hàm chỉ có các tham số đầu vào. Do đó, mặc dù cả thủ tục và hàm đều có thể có tham số, nhưng cú pháp khai báo tham số thủ tục khác với cú pháp của hàm.
-
Các hàm trả về một giá trị, vì vậy phải có mệnh đề RETURNS trong định nghĩa hàm để chỉ ra kiểu dữ liệu của giá trị trả về. Ngoài ra, phải có ít nhất một câu lệnh RETURN trong thân hàm để trả về giá trị cho trình gọi.
Mặt khác, RETURNS và RETURN không xuất hiện trong định nghĩa thủ tục.