Først som nævnt af @eggyal er dette ikke den bedste måde at gøre tingene på. Men det kan gøres ved at bruge udarbejdede udsagn. Dvs.
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;
Du kan selvfølgelig tilføje feltnavne osv. efter behov, eller bruge en SELECT eller UPDATE osv. Dette er ikke ideelt, men vil gøre det du leder efter.
Jeg har været nødt til at bruge dette nogle steder før, hvor den samme vedligeholdelse bliver udført på flere tabeller, som har forskellige feltnavne (/tabelnavne), og så i stedet for at skrive den samme funktion 20 gange, bruger jeg i stedet denne type lagret procedure, som kan derefter kaldes til at foretage indeksering osv.
Som også nævnt af @eggyal , selvom dette kan gøre som du beder om, gør det måske ikke som du har brug for. Hvis du kan give flere oplysninger, kan du få en bedre løsning.