吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1606|回复: 4
收起左侧

[其他转载] 【笔记】MySql存储过程初体验

[复制链接]
alan3258 发表于 2021-3-15 08:48
需求:为每一个部门添加一个临时账号
废话不多说,上代码:
[SQL] 纯文本查看 复制代码
-- 创建存储过程之前需判断该存储过程是否已存在,若存在则删除
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、游标遍历相关知识。
由于这个存储过程是入门之用,大神们请收下留情!!!!

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
苏紫方璇 + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

不知道改成啥 发表于 2021-3-15 09:29
直接insert select感觉赢就可以吧
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
学习中,期待更新
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 19:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表