Innanzitutto, come menzionato da @eggyal, questo non è il modo migliore per fare le cose. Ma può essere fatto utilizzando istruzioni preparate. Cioè
DROP PROCEDURE IF EXISTS `exampleOfPrepareStatement`;
CREATE DEFINER = `user`@`%` PROCEDURE `exampleOfPrepareStatement`(inTableName VARCHAR(100))
MODIFIES SQL DATA
SQL SECURITY INVOKER
BEGIN
SET @hr1 = CONCAT('
INSERT INTO `',inTableName,'` (
-- fields (can use parameters same as table name if needed)
)
-- either VALUES () or SELECT here
');
-- Prepare, execute, deallocate
PREPARE hrStmt1 FROM @hr1;
EXECUTE hrStmt1;
DEALLOCATE PREPARE hrStmt1;
END;
Ovviamente puoi aggiungere nomi di campo ecc. Se necessario, o utilizzare SELECT o UPDATE ecc. Questo non è l'ideale, ma farà quello che stai cercando.
Ho dovuto usarlo in alcuni punti prima in cui viene eseguita la stessa manutenzione su più tabelle che hanno nomi di campo diversi ( / nomi di tabella ) e quindi invece di scrivere la stessa funzione 20 volte, utilizzo invece questo tipo di stored procedure che può quindi essere chiamato per eseguire l'indicizzazione ecc.
Come menzionato anche da @eggyal , mentre questo potrebbe fare come chiedi, potrebbe non fare come ti serve. Se puoi fornire maggiori informazioni, potresti ottenere una soluzione migliore.