Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Crie uma função com argumentos opcionais no MySQL


Você não pode definir parâmetros opcionais em procedimentos armazenados do MySQL.
Você pode, entretanto, definir parâmetros opcionais em uma UDF do MySQL.

Você sabe que o MySQL tem um agregado AVG função ?

Solução Se você puder enfrentar a feiúra dessa solução alternativa, aqui está o código de amostra que usa uma string separada por vírgula com valores como entrada e retorna a média.
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 ;

Use concat_ws para alimentar a função.
SELECT MyAvg(CONCAT_WS(',',100,200,300,500)) AS test;

Você também pode escrever uma UDF em C(++) ou Delphi/Lazarus