第一个MySQL存储过程
需求
单号导入的时候乱写的(字母+数字) ,入库后需要保证统一格式
新的知识点
mysql查询支持正则查询
存储过程游标使用
借鉴博客
实现
思路
根据正则查询出所有需要修改的数据,然后设置自增变量和前缀,一个个修改
存储过程
# 删除存储过程
drop procedure refreshSendOrderNo;
# 创建新的存储过程
DELIMITER //
CREATE PROCEDURE refreshSendOrderNo()
BEGIN
DECLARE id varchar(36);
DECLARE prefix varchar(36) DEFAULT 'FHNO';
DECLARE s int(11) DEFAULT 0;
DECLARE sendNo bigint(20) DEFAULT 1;
DECLARE ids CURSOR for SELECT id FROM `t_order` where order_no regexp binary '^([a-zA-z]+[0-9]+)$' ORDER BY create_time ASC,id ASC;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s=1;
OPEN ids ;
FETCH ids into id ;
while s <> 1 DO
set sendNo=sendNo+1;
update t_orderset order_no =concat(prefix, sendNo) where id=recordGoodNo;
FETCH ids INTO id ;
end WHILE;
CLOSE ids ;
END;
//
DELIMITER ;
# 调用存储过程
call refreshSendOrderNo();