MySQL 使用 EXEC () 的动态列名中的过程错误

MySQL procedure error in dynamic column name using EXEC ()

我在 EXEC () 函数的 MySQL 过程中遇到错误:

错误原因是什么?

CREATE PROCEDURE get_string_try(in_strlen int, in_id int)
BEGIN 
set @var:='';
while(in_strlen>0) 
do
    set @var:=concat(@var,IFNULL(ELT(1+FLOOR(RAND() * 53), 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',' ','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'),'kovendan'));
    set in_strlen:=in_strlen-1;
    set @ix :=1;
        while (@ix < 4) 
        do
            set @select_column_insert:= ELT(@ix, 'address','lastname','middlename');
            #SET @DynamicQuery_1 = ('UPDATE students set ' + @select_column_insert +' = '+ @var +' where id = '+in_id);
            #SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = Database() AND TABLE_NAME = 'students' AND column_name = 'middlename' INTO @select_column_insert;
           
            EXEC('UPDATE students set ' + @select_column_insert +' = '+ @var +' where id = '+in_id);
            set @ix = @ix+1;
        end while;
end while;  
END $$
delimiter ;
CALL get_string_try(6,7);

终于找到了解决方案。

参考以下:

DELIMITER $$
CREATE PROCEDURE get_string_try(in_strlen int, in_id int)
BEGIN 
set @var:='';
while(in_strlen>0) 
do
    set @var:=concat(@var,IFNULL(ELT(1+FLOOR(RAND() * 53), 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',' ','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'),'kovendan'));
    set in_strlen:=in_strlen-1;
    set @ix :=1;
        while (@ix < 4) 
        do
            set @select_column_insert:= ELT(@ix, 'address','lastname','middlename');
            SET @DynamicQuery_1 = CONCAT('UPDATE students set ', @select_column_insert, '= ', "'", @var,"'" ,' where id = ',in_id);
            
            PREPARE stmt FROM @DynamicQuery_1;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;
            set @ix = @ix+1;
        end while;
end while;  
END $$
delimiter ;
CALL get_string_try(6,8);