将表名作为参数传递给mysql存储过程中的游标

将表名作为参数传递给mysql存储过程中的游标,mysql,Mysql,在实现游标时,我无法将表名作为参数传递给游标中声明的select查询。如何将表名作为参数传递给taht查询 DELIMITER // Drop PROCEDURE IF EXISTS GetRecord; CREATE PROCEDURE GetRecord(IN hr int,IN TableName varchar(50)) BEGIN declare done int DEFAULT 0; declare ID int DEFAULT 0; declare name varchar(25

在实现游标时,我无法将表名作为参数传递给游标中声明的select查询。如何将表名作为参数传递给taht查询

DELIMITER //

Drop PROCEDURE IF EXISTS GetRecord;
CREATE PROCEDURE GetRecord(IN hr int,IN TableName varchar(50))
BEGIN
declare done int DEFAULT 0;
declare ID int DEFAULT 0;
declare name varchar(25);

declare cur1 cursor for SELECT id ,name FROM TableName;
declare continue handler for not found set done=1;
SET @query = concat('update Student set no=no+? where id=?');   
PREPARE stmt from @query;
    open cur1;  
    igmLoop: loop
         fetch cur1 into ID,name;
        SELECT ID;
         IF done = 1 THEN 
         LEAVE igmLoop;
         END IF;
        SET @id = ID;
        SET @HR =hr;
        EXECUTE stmt USING @HR,@id; 

    end loop igmLoop;
    close cur1;
    DEALLOCATE PREPARE stmt;

END;//
DELIMITER ;

如果MYSQL确实知道表名,则无法编译、优化和保存SP的执行计划。因此,您不能将其作为存储过程来执行。那么,有没有其他方法来实现此逻辑?我可以在单个变量中存储多个记录并逐个使用它们吗?除了游标之外,还有什么方法可以实现这一点吗?可能是使用存储函数?不会为函数预生成执行计划