Po pierwsze, jak wspomniał @eggyal, nie jest to najlepszy sposób na zajmowanie się rzeczami. Ale można to zrobić za pomocą przygotowanych oświadczeń. To znaczy
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;
Możesz oczywiście dodać nazwy pól itp. w razie potrzeby lub użyć SELECT lub UPDATE itp. To nie jest idealne, ale zrobi to, czego szukasz.
Musiałem tego użyć w niektórych miejscach wcześniej, w których ta sama konserwacja jest wykonywana na wielu tabelach, które mają różne nazwy pól ( / nazwy tabel ), więc zamiast pisać tę samą funkcję 20 razy, zamiast tego używam tego typu procedury składowanej, która można go następnie wywołać w celu wykonania indeksowania itp.
Jak również wspomniał @eggyal , chociaż może to zrobić to, o co prosisz, może nie działać tak, jak potrzebujesz. Jeśli możesz podać więcej informacji, możesz uzyskać lepsze rozwiązanie.