Bạn không thể đặt các tham số tùy chọn trong các thủ tục được lưu trữ của MySQL.
Tuy nhiên, bạn có thể đặt các tham số tùy chọn trong MySQL UDF.
Bạn có biết rằng MySQL có tổng hợp AVG chức năng ?
Giải pháp thay thế Nếu bạn có thể đối mặt với sự xấu xí của cách giải quyết này, đây là mã mẫu sử dụng một chuỗi được phân tách bằng dấu phẩy với các giá trị làm đầu vào và trả về giá trị trung bình.
DELIMITER $$
CREATE FUNCTION MyAvg(valuestr varchar) RETURNS float
BEGIN
DECLARE output float;
DECLARE arg_count integer;
DECLARE str_length integer;
DECLARE arg float;
DECLARE i integer;
SET output = NULL;
SET i = LENGTH(valuestr);
IF i > 0 THEN BEGIN
SET arg_count = 1;
WHILE i > 0 DO BEGIN
IF MID(valuestr, i, 1)
SET i = i - 1;
END; END WHILE;
/* calculate average */
SET output = 0;
SET i = arg_count;
WHILE i > 0 DO BEGIN
SET arg = SUBSTRING_INDEX(
SUBSTRING_INDEX(valuestr, ',' , i)
, ',', -1 );
SET output = output + arg;
SET i = i - 1;
END; END WHILE;
SET output = output / arg_count;
END; END IF;
RETURN output;
END $$
DELIMITER ;
Sử dụng concat_ws để cung cấp hàm.
SELECT MyAvg(CONCAT_WS(',',100,200,300,500)) AS test;
Bạn cũng có thể viết UDF trong C (++) hoặc Delphi / Lazarus