-- 临时修改换行符
DELIMITER //
-- 定义存储过程名称以及入参
DROP PROCEDURE IF EXISTS method1;
CREATE PROCEDURE method1(IN param1 int)
BEGIN
-- 定义循环结束标识
DECLARE done INT DEFAULT FALSE;
-- 定义接收游标结果集的变量
DECLARE row_id varchar(255);
-- 定义游标, 替换your_table为你的表名, 替换conditions为你的查询条件
DECLARE cur CURSOR FOR select row_id from your_table where conditions;
-- 定义CONTINUE HANDLER捕获,当游标尝试从结果集中获取下一行数据,但已经没有更多数据时,MySQL 会抛出一个特殊的 NOT FOUND 条件
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
-- 开始循环
read_loop:
LOOP
-- 接收游标结果集
-- 注意: 使用游标时, FETCH 语句后面的变量数量必须与游标查询结果集中的列数相匹配, 否则报:“Incorrect number of FETCH variables”
FETCH cur INTO row_id;
IF done THEN
-- 跳出循环
LEAVE read_loop;
END IF;
-- 这里可以执行你的子查询,比如更新操作
-- 例如: UPDATE other_table SET some_column = some_value WHERE some_other_column = row_id;
END LOOP;
CLOSE cur;
END //
-- 换回原换行符
DELIMITER ;
-- 调用存储过程
CALL method1(1);
存储过程模板记录
最新推荐文章于 2024-10-02 00:27:17 发布