navicate创建mysql存储过程,遍历list查询集合,执行业务逻辑

简介

  • navicate创建mysql存储过程,同时需要对存储过程中的查询list结果集进行遍历,获取相应的结果参数执行其他的业务逻辑;
  • 存储过程可定义事件定时器,定时执行函数,具体操作可见另一篇博文:navicate创建mysql存储过程,定时器事件定时调用,更新状态;

实践

-- 存储过程,遍历结果集
BEGIN
    #Routine body goes here...、
    #SHOW VARIABLES LIKE "%event_scheduler%"; -- 查看定时器开启状态
    #SET GLOBAL event_scheduler = OFF; -- 设置定时器开关状态
    
    -- 声明参数
    DECLARE f int DEFAULT 0;-- 定义游标循环数
    DECLARE a int(11);-- 主键
    DECLARE b varchar(20);-- 姓名
    DECLARE b varchar(20);-- 性别
    DECLARE d int(11);-- 年龄
    
    -- SET @RANDOM_CODE = (SELECT CONCAT('1',CEILING(RAND()*9000000000+1000000000))); -- 设置全局变量,获取11位随机整数
    
    -- 定义游标,并将sql结果集赋值到游标中
    DECLARE list CURSOR FOR SELECT id name,sex,age from t_user WHERE age<18 ;
    
    -- 声明当游标遍历完后将标志变量置成某个值,然后退出循环
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET f=1;
 
    -- 打开游标,开始遍历
    open list;
    
        -- 将游标中的值赋值给变量;
        -- 注意:变量名勿和返回的列名同名,变量顺序要和sql结果列的顺序一致
        fetch list into a,b,c,d;
        
        -- 当f不等于1时,会一直循环
        while f<>1 do
        
                -- 获取遍历变量,执行多个业务逻辑
                -- 业务1:更新操作
                UPDATE 
                        t_user t set t.remark='未满18岁',t.update_time=NOW()
                WHERE
                        t.id=a; -- 可直接赋值
                
                -- 业务2:增加日志
                INSERT INTO 
                        t_log(id,username,remark,create_time)
                VALUES
                        ((SELECT CONCAT('1',CEILING(RAND()*9000000000+1000000000))),b,'修改备注日志',NOW());

                -- 业务3:其他
                -- IF expression THEN 
                -- END IF;

            -- 当f等于1时表明遍历完成,退出循环
            fetch list into a,b,c,d;
        end while;
        
    -- 关闭游标
    close list;
END

 总结

  • 存储过程可使用事件去定时执行,查看设置事件开启结束,可使用以下mysql操作命令:
SHOW VARIABLES LIKE "%event_scheduler%"; -- 查看定时器开启状态
SET GLOBAL event_scheduler = OFF; -- 设置定时器开关状态
  • 存储过程对于list的遍历在对当前行参数的使用有要求的时候,相对有效,如果不需要对行参数使用,则直接进行单行操作,实时更新即可,无需使用list遍历;
  • 在进行遍历操作的时候,一定要设置退出循环参数,否则很容易让系统崩溃;
  • 实践是检验认识真理性的唯一标准,自己动手,丰衣足食;

 

 

你可能感兴趣的:(运维,定时任务,数据库,mysql,navicate,存储过程,定时器,循环遍历)