据我所知,游标的唯一用途是为每个提取逐个从堆栈中选择值。
在shell脚本中,可以使用FOR或WHILE循环实现相同的操作。
示例:
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循环。
下面是游标使用的过程示例。我只想在下面的程序中应用解决方案。
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
$$发布于 2018-02-14 06:58:03
MySQL存储过程中没有for/while循环结构来迭代查询结果。您可以使用光标演示一个示例,这是唯一的方法。有人请求使用更简单的语法(例如https://bugs.mysql.com/bug.php?id=68758),但到目前为止还没有为MySQL实现任何请求。
也许您会发现用应用程序编程语言而不是MySQL存储过程编写代码会更有效率。老实说,我不喜欢MySQL存储过程,也不使用它们。
在您展示的示例中,存储过程中可以使用的一个替代方法是使用UPDATE语句将更改应用于匹配集中的所有行:
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%';https://stackoverflow.com/questions/48780279
复制相似问题