Pertama seperti yang disebutkan oleh @eggyal ini bukan cara terbaik untuk melakukan sesuatu. Tapi itu bisa dilakukan dengan menggunakan pernyataan yang sudah disiapkan. Yaitu
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;
Anda tentu saja dapat menambahkan nama bidang dll sesuai kebutuhan, atau menggunakan SELECT atau UPDATE dll. Ini tidak ideal, tetapi akan melakukan apa yang Anda cari.
Saya harus menggunakan ini di beberapa tempat sebelumnya di mana pemeliharaan yang sama dilakukan pada beberapa tabel yang memiliki nama bidang yang berbeda ( / nama tabel ) dan alih-alih menulis fungsi yang sama 20 kali, alih-alih saya menggunakan jenis prosedur tersimpan yang kemudian dapat dipanggil untuk melakukan pengindeksan dll.
Seperti yang juga disebutkan oleh @eggyal , meskipun ini dapat melakukan apa yang Anda minta, itu mungkin tidak melakukan seperti yang Anda butuhkan. Jika Anda dapat memberikan lebih banyak informasi, Anda mungkin mendapatkan solusi yang lebih baik.