Voglio creare una funzione con argomenti opzionali in MySQL. Ad esempio, voglio creare una funzione che calcoli la media dei suoi argomenti. Creo una funzione di cinque argomenti, ma quando l'utente passa solo due argomenti alla funzione, dovrebbe comunque funzionare e restituire la media dei due argomenti.Creare una funzione con argomenti opzionali in MySQL
risposta
Non è possibile impostare parametri opzionali nelle stored procedure MySQL.
È tuttavia possibile impostare parametri facoltativi in una UDF MySQL.
Sai che MySQL ha un AVG aggregate function?
Soluzione Se si può affrontare la bruttezza di questa soluzione alternativa ecco SampleCode che utilizza una stringa separati da virgola 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 ;
Utilizzare concat_ws per alimentare la funzione.
SELECT MyAvg(CONCAT_WS(',',100,200,300,500)) AS test;
si può anche write an UDF in C(++) o Delphi/Lazarus
Non vedo dov'è il parametro opzionale nell'UDF. Inoltre, 'SQL ERROR (1064) Hai un errore nella sintassi SQL ...' – Pacerier
non credo questa affermazione è corretta: "Si può comunque impostare i parametri opzionali in un MySQL UDF". Probabilmente dovresti dire qualcosa del tipo: "Non puoi impostare un parametro opzionale in una UDF MySQL, ma ecco una soluzione". Non si può avere un parametro opzionale in un Procostorico, e sono sicuro che lo stesso è vero per un UDF. – Tom
@Tom a UDF è qualcosa di diverso da una funzione utente mysql. È una funzione che scrivi in C/C++, che può essere importata in MySQL e supporta argomenti opzionali. – juacala
Mentre lontano da una soluzione ideale, ecco come ho risolto parametri opzionali per una funzione concat avevo bisogno:
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: questo vuol dire devi chiamare il metodo che corrisponde al numero di argomenti.
Un altro approccio è passare solo un parametro 'super' che è stringa con virgole in esso che separano i parametri reali. La procedura mysql può quindi analizzare il parametro 'super' nei parametri reali separati. Esempio:
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. Come posso creare una funzione Python con argomenti opzionali?
- 2. Come creare la funzione elisp interattiva con argomenti opzionali
- 3. Argomenti opzionali denominati in Mathematica
- 4. Creare una funzione con variabili di chiamata opzionali
- 5. Funzione con i dizionari come argomenti opzionali - Python
- 6. Come passare gli argomenti opzionali
- 7. Argomenti opzionali LaTeX
- 8. Argomenti opzionali C++/CLI
- 9. Propagazione argomenti opzionali
- 10. argomenti opzionali nelle funzioni fortran
- 11. Argomenti opzionali nella clausola WHERE
- 12. Test degli argomenti opzionali in PHP
- 13. Come creare una funzione in bashrc per accettare argomenti?
- 14. Utilizzo di getopt in C con argomenti non opzionali
- 15. Come avere argomenti predefiniti e opzionali?
- 16. più parametri opzionali funzione
- 17. Come posso avere argomenti opzionali AND argomenti di parole chiave per la stessa funzione?
- 18. Chiama una funzione con argomenti lista o splat
- 19. Creare un tipo di funzione std :: con argomenti limitati
- 20. variabili di istanza python come argomenti opzionali
- 21. sovraccarico new e delete operatore con argomenti opzionali
- 22. come passare argomenti in funzione all'interno di una funzione in
- 23. Definizione di una funzione con più argomenti impliciti in Scala
- 24. funzione con argomenti chiamata in baffi javascript
- 25. Funzione in C con argomenti illimitati?
- 26. Esistono modi per creare argomenti opzionali per le funzioni in VB Script?
- 27. C'è un modo migliore per avere argomenti opzionali in Haskell?
- 28. defrecord con chiavi opzionali
- 29. Posso creare una vista con parametro in MySQL?
- 30. funzione con argomenti predefiniti dipendenti
correlato: http://stackoverflow.com/questions/91150/mysql-stored-procedure –
duplicato: http://stackoverflow.com/questions/12652241/writing-optional-parameters-within -stored-procedures-in-mysql –
Non può essere fatto. Le risposte qui sotto sono soluzioni alternative. – Tom