据我所知,游标的唯一用途是从堆栈中逐个拾取值,用于每次获取
在shell脚本中,同样可以使用FOR或WHILE循环来实现。
示例:
while read ip;
do
echo $ip
done < ./test.txt
(或)
IFS=$'\n'
for ip in $(cat ./test.txt)
do
echo "$ip"
done
这里如果test.txt有多行,那么对于一次迭代,一行将加载到变量ip。
如何在mysql程序中实现相同的没有游标和使用FOR(或)WHILE循环。
以下是使用光标的程序示例。我只想在下面的程序中应用解决方案。
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
$$
1条答案
按热度按时间cyvaqqii1#
MySQL存储过程中没有for/while循环结构来迭代查询结果。您使用光标显示了一个示例,这是唯一的方法。有人要求更简单的语法(例如https://bugs.mysql.com/bug.php?id=68758),但到目前为止还没有为MySQL实现。
也许您会发现用应用程序编程语言编写代码比用MySQL存储过程编写代码更有效率。老实说,我不喜欢MySQL存储过程,我也不使用它们。
在您显示的示例中,可以在存储过程中使用的另一种方法是使用UPDATE语句将更改应用于匹配集中的所有行: