@eggyalが述べたように、最初にこれは物事を進めるための最良の方法ではありません。ただし、プリペアドステートメントを使用して実行できます。つまり
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;
もちろん、必要に応じてフィールド名などを追加したり、SELECTやUPDATEなどを使用したりすることもできます。これは理想的ではありませんが、探していることを実行できます。
フィールド名(/テーブル名)が異なる複数のテーブルで同じメンテナンスを行う前に、これを使用する必要があったため、同じ関数を20回記述する代わりに、このタイプのストアドプロシージャを使用します。その後、インデックス作成などを行うために呼び出すことができます。
@eggyalでも言及されているように、これはあなたが求めるように機能するかもしれませんが、必要に応じて機能しない可能性があります。より多くの情報を提供できれば、より良い解決策が得られるかもしれません。