首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是mysql游标的替代?

什么是mysql游标的替代?
EN

Stack Overflow用户
提问于 2018-02-14 05:32:30
回答 1查看 1.8K关注 0票数 1

据我所知,游标的唯一用途是为每个提取逐个从堆栈中选择值。

在shell脚本中,可以使用FOR或WHILE循环实现相同的操作。

示例:

代码语言:javascript
复制
               while read ip; 
               do 
               echo $ip
               done < ./test.txt

     (OR)
              IFS=$'\n'
               for ip in $(cat ./test.txt)
                 do
                   echo "$ip"
                done

在这里,如果test.txt有多行,那么在一次迭代中,一行将被加载到varible ip中。

如何在mysql过程中实现不带游标和使用FOR (或) WHILE循环。

下面是游标使用的过程示例。我只想在下面的程序中应用解决方案。

代码语言:javascript
复制
           delimiter $$
             create procedure Replace_URL_IP()
            begin
            declare finished varchar(20);
            declare ip varchar(20);
            declare c1 cursor for select SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(VALUE,'/',3),'//',-1),':',1) IP from rbt_parameters where PARAM like '%URL%' and VALUE like 'http%';
           declare continue handler for NOT FOUND set finished=1;
           open c1;
           start_loop: loop
               fetch c1 into ip;
                      update rbt_parameters set value=replace(value,ip,'127.0.0.1') where PARAM like '%URL%' and VALUE like 'http%';
                      if finished=1 then
                      leave start_loop;
                      end if;
                      end loop;
          close c1;
          end
          $$
EN

回答 1

Stack Overflow用户

发布于 2018-02-14 06:58:03

MySQL存储过程中没有for/while循环结构来迭代查询结果。您可以使用光标演示一个示例,这是唯一的方法。有人请求使用更简单的语法(例如https://bugs.mysql.com/bug.php?id=68758),但到目前为止还没有为MySQL实现任何请求。

也许您会发现用应用程序编程语言而不是MySQL存储过程编写代码会更有效率。老实说,我不喜欢MySQL存储过程,也不使用它们。

在您展示的示例中,存储过程中可以使用的一个替代方法是使用UPDATE语句将更改应用于匹配集中的所有行:

代码语言:javascript
复制
UPDATE rbt_parameters
SET VALUE = REPLACE(VALUE,
  SUBSTRING_INDEX(
    SUBSTRING_INDEX(
      SUBSTRING_INDEX(value, '/', 3),
      '//', -1),
    ':', 1),
  '127.0.0.1')
WHERE PARAM LIKE '%URL%' AND VALUE LIKE 'http%';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48780279

复制
相关文章

相似问题

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