Mysql
 sql >> Base de données >  >> RDS >> Mysql

Créer une fonction avec des arguments optionnels dans MySQL

Vous ne pouvez pas définir de paramètres facultatifs dans les procédures stockées MySQL.
Vous pouvez toutefois définir des paramètres facultatifs dans une UDF MySQL.

Vous savez que MySQL a un agrégat AVG fonction ?

Solution Si vous pouvez faire face à la laideur de cette solution de contournement, voici un exemple de code qui utilise une chaîne séparée par des virgules avec des valeurs en entrée et renvoie la moyenne.

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 ;

Utilisez concat_ws pour alimenter la fonction.

SELECT MyAvg(CONCAT_WS(',',100,200,300,500)) AS test;

Vous pouvez également écrire un UDF en C(++) ou Delphi/Lazarus