系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 数据库 > Mysql > 详细页面

mysql存储过程游标之loop循环解读

时间:2023-10-29来源:系统城装机大师作者:佚名

mysql存储过程游标loop循环

mysql存储过程游标 一共有3中循环方式 while, repeat, loop,

loop

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
DELIMITER $
CREATE PROCEDURE DAY081002()
BEGIN
#定义参数 后面使用
DECLARE a INT;
DECLARE b INT  DEFAULT 0;
# 定义游标
DECLARE c_cursor CURSOR FOR SELECT shopstoreid FROM shopstore;
OPEN  c_cursor; #开启游标
#定义loop循环 循环名字为 loop_label
loop_label: loop
#将游标中的shopstoreid 这个值给到a
FETCH c_cursor INTO a;
# update执行的条件
IF b <4 THEN
UPDATE shopstore SET storefansnum=74784 WHERE shopstoreid=b;
SET b=b+1;
END IF;
IF b>=7 THEN
LEAVE loop_label;
END IF;
#停止LOOP 循环
END LOOP loop_label;
END $
CALL DAY081002()

在这里插入图片描述

在这里插入图片描述

mysql存储过程游标遍历使用简述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
--游标样例:把users中的id为偶数的记录逐一更新用户名
create procedure test11
    begin
        declare stopflag int default 0 ;
        declare username varchar(32) ;
        --创建一个游标变量,declare变量名cursor...
        declare username_cur cursor for select name from users where id%2=0;
        --游标是保存查询结果的临时区域
        --游标变量username_cur保存了查询的临时结果,实际上就是结果集
        --当变量中保存的结果都查询一遍(遍历),到达结尾,将变量stopflag设置为1,用于循环中判断是否结束
        declare continue handler for not found set stopflag = 1;
        open username_cur ;--打开游标
        fatch username_cur into username ;--游标向前走一步,取出一条记录放在变量 username 中
        while (stopflag = 0) do   --如果游标还没有结尾就继续
            begin
                --在用户名前拼接'_cur'字段
                update users set name = concat(username,'_cur') where name = username ;
                fetch username_cur into username;
            end;
        end while;      --结束循环
        close username_cur ;        --关闭游标
    end
--游标根据日期区间循环写入数据
create procedure f_rpt_g06
(   in i_begin_date int ,
    in i_end_date int )
begin
    declare v_oc_date,v_m_begin_date int;
    declare done int default 0;
    -- 游标循环处理输出入参数日期区间的数据
    declare cur cursor for
        select oc_date from dim_date
            where oc_date between i_begin_date and i_end_date
            order by oc_date asc;
    --将变量done设置为1,用于循环中判断是否交结束
    declare continue hadnler for not found set done = 1;
    --打开游标
    open cur;
    dateloop:loop
    --游标向前走一步,取出一条记录放在变量v_oc_date中
        fetch cur into v_oc_date;
        if done=1 then
            leave dateloop;
        end if;
    --删除表数据
    delete from f_rpt_g06
        where data_dt = v_oc_date
    --插入表数据
    insert into f_rpt_g06
        (字段1,字段2,字段3,字段4)
    select 字段1,字段2,字段3,字段4 from f_rpt_g06_123
    end loop dateloop
    close loop
end
分享到:

相关信息

  • MySQL的核心查询语句详解

    一、单表查询 1、排序 2、聚合函数 3、分组 4、limit 二、SQL约束 1、主键约束 2、非空约束 3、唯一约束 4、外键约束 5、默认值 三、多表查询 1、内连接 1)隐式内连接: 2)显式内连接: 2、外连接 1)左外连接 2)右外连接 四...

    2023-10-30

  • Mysql中如何删除表重复数据

    Mysql删除表重复数据 表里存在唯一主键 没有主键时删除重复数据 Mysql删除表中重复数据并保留一条 准备一张表 用的是mysql8 大家自行更改 创建表并添加四条相同的数据...

    2023-10-30

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载