Quiero crear una función con argumentos opcionales en MySQL. Por ejemplo, quiero crear una función que calcule el promedio de sus argumentos. Creo una función de cinco argumentos, pero cuando el usuario pasa solo dos argumentos a la función, entonces aún debería ejecutarse y devolver el promedio de los dos argumentos.Crear una función con argumentos opcionales en MySQL
Respuesta
No se pueden establecer parámetros opcionales en los procedimientos almacenados de MySQL.
Sin embargo, puede establecer parámetros opcionales en una UDF de MySQL.
¿Sabes que MySQL tiene un AVG aggregate function?
Solución Si usted puede hacer frente a la fealdad de esta solución aquí está samplecode que utiliza una cadena separada por comas con los valores como entrada y devuelve 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 ;
Utilice concat_ws para alimentar la función.
SELECT MyAvg(CONCAT_WS(',',100,200,300,500)) AS test;
También puede hacer write an UDF en C(++) o Delphi/Lazarus
No veo dónde está el parámetro opcional en su UDF. Además, 'SQL ERROR (1064) Tiene un error en su sintaxis SQL ...' – Pacerier
No creo que esta afirmación sea correcta: "Sin embargo, puede establecer parámetros opcionales en una UDF de MySQL". Probablemente deberías decir algo como esto: "No puedes establecer un parámetro opcional en una UDF de MySQL, pero aquí hay una solución alternativa". No puede tener un parámetro opcional en un proceso almacenado, y estoy bastante seguro de que lo mismo es cierto para un UDF. – Tom
@Tom a UDF es algo diferente de una función de usuario mysql. Es una función que usted escribe en C/C++, que se puede importar a MySQL, y admite argumentos opcionales. – juacala
Aunque lejos de ser una solución ideal, esto es cómo resolví parámetros opcionales para una función concat que necesitaba:
delimiter ||
create function safeConcat2(arg1 longtext, arg2 varchar(1023))
returns longtext
return safeConcat3(arg1, arg2, '');
||
create function safeConcat3(arg1 longtext, arg2 varchar(1023), arg3 varchar(1023))
returns longtext
return safeConcat4(arg1, arg2, arg3, '');
||
create function safeConcat4(arg1 longtext, arg2 varchar(1023), arg3 varchar(1023), arg4 varchar(1023))
returns longtext
begin
declare result longText;
set result = concat(arg1, arg2, arg3, arg4);
if(result is null) then
set result=arg1;
end if;
return result;
end
||
Nota: Este medio de tienes que llamar al método que corresponde al número de argumentos.
Otro enfoque es pasar solo un parámetro 'super' que es una cadena con comas que separa los parámetros reales. El procedimiento mysql puede analizar el parámetro 'super' en los parámetros reales separados. Ejemplo:
create procedure procWithOneSuperParam(param1 varchar(500))
declare param2 varchar(100);
begin
if LOCATE(',',param1) > 0 then
.. param2=<extract the string after the ',' from param1> ..
- 1. Cómo crear la función elisp interactiva con argumentos opcionales
- 2. ¿Cómo creo una función de Python con argumentos opcionales?
- 3. javascript argumentos opcionales en función de
- 4. Argumentos con nombre opcionales en Mathematica
- 5. ¿Cómo omitiría argumentos opcionales en una llamada a función?
- 6. Cómo curry una función w.r.t. sus argumentos opcionales en OCaml
- 7. Argumentos opcionales en defgeneric?
- 8. Groovy Closure con argumentos opcionales
- 9. argumentos opcionales en Haskell
- 10. ¿Cómo se crean argumentos opcionales en php?
- 11. Argumentos opcionales en WHERE Cláusula
- 12. LaTeX Argumentos opcionales
- 13. llamados argumentos opcionales PHP?
- 14. Probando argumentos opcionales en PHP
- 15. Cómo pasar los argumentos opcionales
- 16. Propagating argumentos opcionales
- 17. ¿Puede CodeDom crear argumentos opcionales al generar un método C#?
- 18. ¿Cómo usar argumentos opcionales en defprotocol?
- 19. ¿Es posible definir un bloque con argumentos opcionales en Ruby?
- 20. ¿Puede sys.argv manejar argumentos opcionales?
- 21. Métodos genéricos y argumentos opcionales
- 22. Argumentos opcionales de C++/CLI
- 23. ¿Cómo crear una función MySQL personalizada?
- 24. Crear un objeto en C# de un # objeto F con argumentos opcionales
- 25. Argumentos opcionales en Objective-C 2.0?
- 26. Cómo revertir url con argumentos de campos opcionales en django?
- 27. Función almacenada mySQL para crear una babosa
- 28. Argumentos y puntos opcionales en el esquema
- 29. función con múltiples argumentos
- 30. ¿Hay una mejor manera de tener argumentos opcionales en Haskell?
relacionada: http://stackoverflow.com/questions/91150/mysql-stored-procedure –
duplicado: http://stackoverflow.com/questions/12652241/writing-optional-parameters-within -stored-procedures-in-mysql –
No se puede hacer. Las respuestas a continuación son soluciones temporales. – Tom