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

发布于 2025-01-24 19:13:51 字数 1265 浏览 3 评论 0原文

我在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);

I am getting an error in MySQL procedure at EXEC () function:

error in MySQL Procedure at EXEC () Function

What is the cause of error?

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);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

友欢 2025-01-31 19:13:51

最后找到了解决方案。

请参阅下面:

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);

And finally found the solution.

refer below:

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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文