Passare il nome del campo o della tabella alle Stored Procedure in MySQL
Mi è capitato spesso di avere delle Stored Procedure molto simili tra loro, dove la differenza era, ad esempio, solo il campo o la tabella da interrogare.
In questi casi la cosa migliore sarebbe passare il nome del campo / tabella alla SP come parametro.
Solo che poi non lo si può usare come un "normale" parametro.
Specifico che siamo in ambito MySQL, anche se forse vale la stessa cosa per altri db.
Ma visto che è pià facile vederlo che spiegarlo, vi posto un esempio:
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_get`(IN `agente` INT(6), IN `linea` CHAR(2), IN `tipo` CHAR(2), IN `campo` CHAR(64))
NO SQL
BEGIN
SET @query = CONCAT("SELECT * FROM clienti WHERE ",
campo, " = ", agente, " AND associazione_linea = '", linea,"' AND cliente_clde = '", tipo,"'");
PREPARE flex_query FROM @query;
EXECUTE flex_query;
END
Come vedete, passo tutti i parametri che mi servono nella query, e come ultimo passo il campo su cui fare la WHERE.
(Non è necessario metterlo per ultimo ovviamente).
Ma in sostanza dobbiamo passare per la funzione CONCAT, e quindi costruire tutta la query concatenando i vari parametri.
Poi usiamo l'istruzione PREPARE per creare uno statement, che corrisponde alla query.
Non ho avvisato rallentamenti in questa procedura; forse può essere più lenta nel caso di milioni di record, ma non il mi caso.
Enjoy!
mysql stored procedure concat prepare
Commentami!