Passare il nome del campo o della tabella alle Stored Procedure in MySQL

Mattepuffo's logo
Passare il nome del campo o della tabella alle Stored Procedure in MySQL

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!


Condividi

Commentami!