Trong lập trình, hàm là một phần của quy trình nghiệp vụ hoặc phép tính được gói gọn dưới tên hàm
Khi bạn cần chạy một quy trình hoặc tính toán, bạn có thể thực hiện điều đó bằng cách chỉ cần gọi tên hàm
Đây là một hàm ví dụ trong JavaScript
function hello() { console.log("Hello World") } hello() // prints Hello World
Trong MySQL, bạn có thể tạo một hàm được lưu trữ bằng cách sử dụng cú pháp CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 0
Cú pháp cơ bản để tạo một hàm trong MySQL như sau
CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression]
Trước tiên, bạn cần chỉ định tên của hàm trong CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 1
Tiếp theo, bạn cần khai báo các tham số cần nhận cho hàm
Bạn có thể khai báo bao nhiêu tham số tùy thích, nhưng tốt nhất là một hàm nên có từ 0 đến 5 tham số. Quá nhiều tham số có thể làm bạn bối rối khi bảo trì chương trình sau này
Khi bạn có các tham số, hãy chỉ định loại dữ liệu được trả về bởi hàm bằng cách sử dụng từ khóa CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 2
Bạn cũng cần chỉ rõ hàm là CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 3 hay CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 4 bên cạnh từ khóa CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 2
CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 3 có nghĩa là hàm sẽ luôn trả về cùng một đầu ra cho cùng một đầu vào, cho phép MySQL tối ưu hóa việc thực thi hàm
Khi bạn không chắc chắn, chỉ cần chỉ định CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 3 vì đó là mặc định mà MySQL sẽ sử dụng cho các chức năng
Cuối cùng, bạn cần chỉ định CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 8 được hàm trả về bằng cách sử dụng từ khóa CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 9
Đây là một hàm MySQL tương tự như hàm JavaScript ở trên
CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 2
Khi bạn chạy câu lệnh trên, bạn có thể truy vấn hàm bằng câu lệnh CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 20 như sau
CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 4
Tên hàm MySQL là duy nhất, có nghĩa là bạn chỉ có thể có một hàm với một tên nhất định
Chạy cú pháp CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 0 hai lần sẽ gây ra CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 22 ngay cả khi cùng một chức năng có các tham số khác nhau
CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 7
CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 8
Để sửa đổi một hàm hiện có, trước tiên bạn cần bỏ hàm đó bằng cú pháp CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 23, sau đó chạy lại cú pháp CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 0
CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 1
Tạo một hàm MySQL với nhiều câu lệnh
Theo mặc định, một hàm MySQL chỉ có thể thực thi một câu lệnh CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 9 trong phần thân của nó
Khi bạn cần chạy một quy trình phức tạp với nhiều câu lệnh SQL, thì bạn cần thêm mệnh đề CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 26 và câu lệnh ghép CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 27 vào cú pháp CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 0 của mình
Đây là một ví dụ về một hàm có nhiều câu lệnh
CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 6
Hàm CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 29 ở trên tính toán một CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 40 tùy ý và trả về một CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 41 khác dựa trên giá trị CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 40
Khi giá trị là CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 43 hoặc thấp hơn, thì CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 41 sẽ là CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 45. Nếu không, nó sẽ là CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 46
Vì hàm có nhiều câu lệnh nên dấu phân cách được thay đổi từ dấu chấm phẩy mặc định CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 47 thành dấu gạch chéo kép CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 48 bằng cách sử dụng từ khóa CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 26
Điều này cho phép bạn viết toàn bộ các câu lệnh CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 70, CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 71 và CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 9 ở trên bên trong câu lệnh CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 27
Nếu không có câu lệnh CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 26 thì MySQL sẽ diễn giải lần lượt từng câu lệnh trên, gây ra lỗi
Đây là kết quả khi bạn thử truy vấn hàm bằng câu lệnh CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 20 như sau
CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 4
CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 5
Và đó là cách bạn có thể tạo một chức năng trong máy chủ cơ sở dữ liệu MySQL
Bằng cách lưu trữ một phần quy trình hoặc phép tính bên trong một hàm, bạn có thể thực hiện cùng một quy trình bao nhiêu lần tùy ý bằng cách chỉ cần gọi hàm như được hiển thị trong câu lệnh CREATE FUNCTION [function name] ( [parameter name] [parameter type], [parameter name] [parameter type], ... ) RETURNS [data type] [DETERMINISTIC] RETURN [expression] 20 ở trên