首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MYSQL存储过程中执行Update语句

问如何在MYSQL存储过程中执行Update语句
EN

Stack Overflow用户
提问于 2022-11-07 11:16:29
回答 1查看 35关注 0票数 -1

我在MYSQL 5.7.33中有一个存储过程,其中有一个select语句,我打印update语句并尝试执行该语句来更新表中的值。

我的程序示例如下:

代码语言:javascript
复制
  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语句,如下所示

代码语言:javascript
复制
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语句。

注:这是整个过程的一小部分,我正在寻找建议,在此基础上,我需要增加更多的逻辑。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-07 12:10:02

正确的代码应该是(我假设Test.sample.id是数字的)

代码语言:javascript
复制
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中的非空值更新所有行,因此代码的执行方式类似于简单。

代码语言:javascript
复制
UPDATE Test.sample 
SET COL = 0 
WHERE id IS NOT NULL;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74345726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档