MySql 创建存储过程实例

DROP PROCEDURE IF EXISTS `staff_zt_test`;

CREATE PROCEDURE `staff_zt_test`()
BEGIN
  -- 查询t_user
	-- 该变量用于标识是否还有数据需遍历
	
	DECLARE flag INT DEFAULT 0;
	-- 创建一个变量用来存储遍历过程中的值
	DECLARE user_id INT(40) DEFAULT 0;
	DECLARE user_name VARCHAR(200) DEFAULT '';
	DECLARE user_id_card_type VARCHAR(200) DEFAULT '';
	DECLARE user_represent_job_info VARCHAR(200) DEFAULT '';
	
	-- declare 声明参数,default:设置声明参数的默认值
	-- 查询出需要遍历的数据集合
	DECLARE userList CURSOR FOR (select id,user_name,id_card_type,represent_job_info from t_user where represent_job_info is not null);
	-- 查询是否有下一个数据,没有将标识设为1,相当于hasNext
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag = 1;
	-- 打开游标
	OPEN userList;
		-- 取值设置到临时变量中
		FETCH userList INTO user_id,user_name,user_id_card_type,user_represent_job_info;
		-- 遍历未结束就一直执行
		WHILE flag != 1 DO
				-- targetSQL //你想要执行的目标功能,这里可以写多个SQL
				
				--   注意
				-- 这里有一个坑,目标语句引用临时变量,实测发现不需要加@符号,但是搜索到的结果都是例如:@id ,这样来使用,实测发现无法取到数据
				--   注意
				-- >>>>>>
				-- 2103	001	第十三届全国人大代表
				-- 2104	002	山东省第十三届人大代表
				-- 2105	003	德州市第十八届人大代表
				-- 2128	004	德州市第十九届人大代表
				
				-- 判断user_represent_job_info是否包含’2128‘
				if LOCATE('2128',user_represent_job_info)>0 then
				
					INSERT INTO t_representative_session 
					( t_user_id, user_name, session, start_time, end_time, status, level, remark, session_description, status_description, create_date) 
					VALUES 
					(user_id, user_name, '2128', '2022-02-24 00:00:00', '2022-02-25 00:00:00', '2130', user_id_card_type, 'SQL生成', '德州市第十九届人大代表', '在任',now());

				end if;
				
				if LOCATE('2103',user_represent_job_info)>0 then
				
					INSERT INTO t_representative_session 
					( t_user_id, user_name, session, start_time, end_time, status, level, remark, session_description, status_description, create_date) 
					VALUES 
					(user_id, user_name, '2103', '2022-02-24 00:00:00', '2022-02-25 00:00:00', '2131', user_id_card_type, 'SQL生成', '第十三届全国人大代表', '不在任',now());

				end if;
				
				if LOCATE('2104',user_represent_job_info)>0 then
				
					INSERT INTO t_representative_session 
					( t_user_id, user_name, session, start_time, end_time, status, level, remark, session_description, status_description, create_date) 
					VALUES 
					(user_id, user_name, '2104', '2022-02-24 00:00:00', '2022-02-25 00:00:00', '2131', user_id_card_type, 'SQL生成', '山东省第十三届人大代表', '不在任',now());

				end if;
				
				if LOCATE('2105',user_represent_job_info)>0 then
				
					INSERT INTO t_representative_session 
					( t_user_id, user_name, session, start_time, end_time, status, level, remark, session_description, status_description, create_date) 
					VALUES 
					(user_id, user_name, '2105', '2022-02-24 00:00:00', '2022-02-25 00:00:00', '2131', user_id_card_type, 'SQL生成', '德州市第十八届人大代表', '不在任',now());

				end if;
				
				
		
				-- 一定要记得把游标向后移一位,这个坑我替各位踩过了,不需要再踩了
				FETCH userList INTO user_id,user_name,user_id_card_type,user_represent_job_info;
		END WHILE;
	CLOSE userList;

END;

知识点:

  1. MySql创建存储过程
  2. 游标使用以及遍历

https://blog.csdn.net/otherhy/article/details/100336243

  1. locate()函数的使用

LOCATE(substr,str):判断是否包含某字符串,如果包含将返回>0的数值,否则,返回0;

  1. 逻辑判断的使用
	IF num = 0 THEN 
	-- 逻辑
	-- ElSE 可不写
	ELSE 
	-- 逻辑
	end if;
  1. 调用存储过程
call 存储过程名字();

注意事项

  • MySql中没有 print() 打印语句, select 1; 类似打印输入也不好用
  • MySql中存储过程没有Return,函数Function 有Return
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值