alan3258 发表于 2021-3-15 08:48

【笔记】MySql存储过程初体验

需求:为每一个部门添加一个临时账号
废话不多说,上代码:
-- 创建存储过程之前需判断该存储过程是否已存在,若存在则删除
DROP PROCEDURE IF EXISTS p_create_temp_user;
-- 创建存储过程
CREATE PROCEDURE p_create_temp_user()
BEGIN
        -- 结束标志
        DECLARE v_flag int DEFAULT 0;
        -- 索引
        DECLARE v_index int DEFAULT 0;
        -- 部门主键
    DECLARE v_depmentId varchar(255);
        -- 部门编码
    DECLARE v_depmentCode varchar(255);
        -- 用户账号
    DECLARE v_username varchar(255);
    -- 定义游标,并将sql结果集赋值到游标中
    DECLARE departList CURSOR FOR select id,org_code from sys_depart ;
    -- 声明当游标遍历完后将标志变量置成某个值
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_flag=1;
    -- 打开游标
    open departList;
      -- 将游标中的值赋值给变量,注意:变量名不要和返回的列名同名,变量顺序要和sql结果列的顺序一致
      fetch departList into v_depmentId,v_depmentCode;
      -- 当v_flag不等于1,也就是未遍历完时,会一直循环
      while v_flag<>1 do
                        -- 索引赋值
                        set v_index = v_index+1;
                        -- 用户账号 user_1 ,user_2 ....
                        set v_username = CONCAT('user_',v_index);
                        -- 执行业务逻辑
                        -- 新建用户
                        insert into user(id,username,realname,password,create_time) values(uuid(),v_username,'123456',now());                       
            -- 当s等于1时表明遍历以完成,退出循环
            fetch departList into v_depmentId,v_depmentCode;
      end while;
    -- 关闭游标
    close departList;
END;
涉及知识点:
1、变量定义。
2、变量赋值。
3、游标定义及赋值操作。
4、游标遍历相关知识。
由于这个存储过程是入门之用,大神们请收下留情!!!!

不知道改成啥 发表于 2021-3-15 09:29

直接insert select感觉赢就可以吧{:1_918:}

caxzan 发表于 2021-3-15 09:34

楼主,存储过程要考虑下异常回滚

alan3258 发表于 2021-3-16 08:39

caxzan 发表于 2021-3-15 09:34
楼主,存储过程要考虑下异常回滚

你说的很在理,我这是临时解决问题之用,之前一直没有接触过,感谢建议!

isMe-Chang 发表于 2021-3-16 11:23

学习中,期待更新{:301_998:}
页: [1]
查看完整版本: 【笔记】MySql存储过程初体验