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