需求:提供一个模板代码,方便日后速查并重用
系统:-
模板/框架:-
环境:window下的mysql8.0
语言:sql
不得不承认,有些事情不常运用的,就会被遗忘.一直写需求,忽然来个数据运维数据需求,还用到mysql的遍历时,真心话一句:不查资料写不出.在此写个简单遍历模板代码,以供他日一时之需.
-- 如果存在,则删除存储过程
DROP PROCEDURE IF EXISTS fetch_process;
-- 定义$$为分隔符
DELIMITER $$
-- 创建存储过程
CREATE PROCEDURE fetch_process()
-- 开启事务
BEGIN
-- 定义变量
DECLARE done INT DEFAULT 0;
DECLARE id INT;
DECLARE data1 VARCHAR(50);
-- 定义游标
DECLARE cur CURSOR FOR SELECT tb1.id, tb1.data1 FROM tb1;
-- 定义跳出循环的条件
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
-- 打开游标
OPEN cur;
-- 开始循环
read_loop: LOOP
FETCH cur INTO id, data1;
IF done THEN
LEAVE read_loop;
END IF;
/*
处理逻辑
-- 例如
SET id = id + 1;
INSERT INTO `testdb`.`tb2` ( `data1`, `data2`) VALUES ( data1, '3');
*/
SET done = 0;
-- 结束循环
END LOOP read_loop;
-- 关闭游标
CLOSE cur;
END $$
-- 重新定义;为分隔符
DELIMITER ;
-- 调用存储过程进行遍历
CALL fetch_process();
-- 如果存在,则删除存储过程
DROP PROCEDURE IF EXISTS fetch_process;
这个模板采用时注意点
1.按需求修改 [定义游标] 和[处理逻辑]的代码,则能运行
2.如果临时变量不够,可以自行添加