Mysql
 sql >> Database >  >> RDS >> Mysql

Crea una funzione con argomenti opzionali in MySQL

Non è possibile impostare parametri facoltativi nelle procedure memorizzate MySQL.
È tuttavia possibile impostare parametri facoltativi in ​​una UDF MySQL.

Sai che MySQL ha un aggregato AVG funzione ?

Soluzione alternativa Se puoi affrontare la bruttezza di questa soluzione alternativa, ecco il codice di esempio che utilizza una stringa separata da virgole con valori come input e restituisce la media.

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 per alimentare la funzione.

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

Puoi anche scrivere un UDF in C(++) o Delphi/Lazarus