U kunt geen optionele parameters instellen in MySQL-opgeslagen procedures.
U kunt echter wel optionele parameters instellen in een MySQL UDF.
U weet dat MySQL een AVG-aggregaat heeft functie ?
Oplossing Als je de lelijkheid van deze tijdelijke oplossing onder ogen kunt zien, is hier de voorbeeldcode die een door komma's gescheiden tekenreeks met waarden als invoer gebruikt en het gemiddelde retourneert.
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 ;
Gebruik concat_ws om de functie te voeden.
SELECT MyAvg(CONCAT_WS(',',100,200,300,500)) AS test;
U kunt ook een UDF schrijven in C(++) of Delphi/Lazarus