Đầu tiên, như đã đề cập bởi @eggyal, đây không phải là cách tốt nhất để tiếp cận mọi thứ. Nhưng nó có thể được thực hiện bằng cách sử dụng các câu lệnh đã chuẩn bị sẵn. Tức là
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;
Tất nhiên, bạn có thể thêm tên trường, v.v. khi cần, hoặc sử dụng CHỌN hoặc CẬP NHẬT, v.v. Điều này không lý tưởng, nhưng sẽ làm được những gì bạn đang tìm kiếm.
Tôi đã phải sử dụng điều này ở một số nơi trước đây khi cùng một bảo trì đang được thực hiện trên nhiều bảng có tên trường (/ tên bảng) khác nhau và vì vậy thay vì viết cùng một hàm 20 lần, thay vào đó tôi sử dụng loại thủ tục được lưu trữ này. sau đó có thể được gọi để thực hiện lập chỉ mục, v.v.
Như đã được đề cập bởi @eggyal, mặc dù điều này có thể thực hiện theo yêu cầu của bạn, nhưng nó có thể không thực hiện như bạn cần. Nếu bạn có thể cung cấp thêm thông tin thì bạn có thể nhận được giải pháp tốt hơn.