sql >> Base de Datos >  >> RDS >> Mysql

Crear una función con argumentos opcionales en MySQL

No puede establecer parámetros opcionales en los procedimientos almacenados de MySQL.
Sin embargo, puede establecer parámetros opcionales en un UDF de MySQL.

Sabes que MySQL tiene un agregado AVG función ?

Solución alternativa Si puede enfrentar la fealdad de esta solución alternativa, aquí tiene un código de muestra que usa una cadena separada por comas con valores como entrada y devuelve el promedio.

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 ;

Usa concat_ws para alimentar la función.

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

También puede escribir un UDF en C(++) o Delphi/Lazarus