0%

mysql_procedure


作者: haozi007 日期:2020-03-08


mysql的存储过程

表的某个字段,现在需要对存储的某些数据,进行批量替换,可以通过存储过程完成。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
delimiter ;;

create procedure `updateJob`(IN tname varchar(50), IN olds varchar(400), IN news varchar(400), IN count int)
begin
declare i int default 1;
declare flag int default 1;
declare old varchar(30);
declare new varchar(30);
while flag<=count do
set old=substring_index(substring_index(olds, ',', i), ',',-1);
set new=substring_index(substring_index(news, ',', i), ',',-1);
set i=i+1;
set flag=flag+1;
set @sqlStr=concat("update ",tname," set job_type='",new,"' where job_type='",old, "'");
prepare stmt from @sqlStr;
execute stmt;
end while;
end ;;

delimiter ;

注意:需要先修改分隔符’;’,以达到存储过程中的’;’不被解释为结束符。

tname表示表名;olds是需要替换的字符串列表(它们以’,’分隔,例如:”a,b,c,d”);news和olds一一对应的替换后的新字符串(格式和olds一致);count表示这些需要替换的字符串数量。