Usare la clausola IN in una Stored Procedure in MySQL
La clausola IN, in una query con vari filtri, può essere molto comoda.
Ma se la vogliamo usare dentro una Stored Procedure in MySQL, può essere problematico passare i valori da usare nella clausola.
Per farlo siamo costretti a concatenare la query usando CONCAT.
Vediamo un esempio:
DELIMITER //
CREATE PROCEDURE sp_query_in(IN valori VARCHAR(255))
NO SQL
BEGIN
SET @query = CONCAT('SELECT * FROM tabella WHERE campo IN (', valori, ')');
PREPARE comando FROM @query;
EXECUTE comando;
DEALLOCATE PREPARE comando;
END
Come vedete i valori li prendiamo con un parametro di tipo VARCHAR, in modo da poterli concatenare.
Questo anche se i parametri, presi singolarmente, sono numeri e non stringhe.
Usiamo CONCAT per concatenare tutta la query e i valori.
Dopo di che prepariamo (PREPARE), eseguiamo (EXECUTE) e deallochiamo (DEALLOCATE) il comando.
Enjoy!
mysql stored procedure prepare execute deallocate concat
Commentami!