我在MYSQL 5.7.33中有一个存储过程,其中有一个select语句,我打印update语句并尝试执行该语句来更新表中的值。
我的程序示例如下:
DELIMITER &&
ALTER PROCEDURE update_stmt ()
BEGIN
SELECT concat(update Test.sample SET COL = 0 where ID = \'',ID,'\','; ) as stmt FROM
Test.Sample into @s;
SET @sql = @s
PREPARE stmt from @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END &&
DELIMITER ;
Error : I'm getting more than a row. 在Select语句中,我将得到多个update语句,如下所示
Update Test.sample SET COL = 0 WHERE ID = 1 ;
Update Test.sample SET COL = 0 WHERE ID = 2 ;
Update Test.sample SET COL = 0 WHERE ID = 3 ;
...
...
...
Update Test.sample SET COL = 0 WHERE ID = n;如何在过程中执行多个update语句。
注:这是整个过程的一小部分,我正在寻找建议,在此基础上,我需要增加更多的逻辑。谢谢
发布于 2022-11-07 12:10:02
正确的代码应该是(我假设Test.sample.id是数字的)
DROP PROCEDURE IF EXISTS update_stmt;
DELIMITER ;;
CREATE PROCEDURE update_stmt ()
BEGIN
SELECT concat('update Test.sample SET COL = 0 where id IN (',
GROUP_CONCAT(id),
');')
FROM Test.Sample
INTO @sql;
PREPARE stmt from @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END;;
DELIMITER ;另一方面,您的代码用id中的非空值更新所有行,因此代码的执行方式类似于简单。
UPDATE Test.sample
SET COL = 0
WHERE id IS NOT NULL;https://stackoverflow.com/questions/74345726
复制相似问题