mysql存储过程使用游标循环插入数据
DELIMITER $$
DROP PROCEDURE IF EXISTS `procedure_course`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `topsale`.`procedure_course`()
BEGIN
DECLARE c_user_login_id VARCHAR(100);
DECLARE done INT DEFAULT 0;
##1.定义游标stock_cursor 根据指定用户id
DECLARE stock_cursor CURSOR FOR SELECT ul.USER_LOGIN_ID FROM user_login ul WHERE ul.party_id='999' AND user_login_id='eric.zhang';##获取本部所有用户id
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN stock_cursor;##2.打开游标
cursor_loop: LOOP
FETCH stock_cursor INTO c_user_login_id; ##3.提取游标
IF done=1 THEN
LEAVE cursor_loop;
END IF;
CALL procedure_course_mapping(c_user_login_id);
END LOOP cursor_loop;
CLOSE stock_cursor; ##关闭游标
END$$
DELIMITER ;
DELIMITER $$ USE `topsale`$$ DROP PROCEDURE IF EXISTS `procedure_course_mapping`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `procedure_course_mapping`(v_user_login VARCHAR(30))
BEGIN DECLARE c_msg_role_id VARCHAR(50);
DECLARE c_count VARCHAR(50); DECLARE done INT DEFAULT 0; DECLARE stock_cursor CURSOR FOR SELECT t.msg_role_id FROM training_course c,t_msg_text t WHERE c.course_id=t.course_id;##获取所有课件的msg_role_id DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN stock_cursor; cursor_loop: LOOP FETCH stock_cursor INTO c_msg_role_id;
IF done=1 THEN
LEAVE cursor_loop;
END IF; SELECT COUNT(*) INTO c_count FROM t_msg_mapping WHERE msg_role_id=c_msg_role_id AND user_login_id=v_user_login;
IF(c_count=0) THEN INSERT INTO t_msg_mapping(user_login_id,msg_role_id,msg_state) VALUES(v_user_login,c_msg_role_id,0); END IF; END LOOP cursor_loop;
CLOSE stock_cursor; END$$ DELIMITER ;

SELECT * FROM information_schema.events//获取所有事件
SET GLOBAL event_scheduler = 1;//开启事件状态,1为开始,0为未开启
SHOW VARIABLES LIKE 'event_scheduler';//显示事件是否开启
DELIMITER $$ USE `topsale`$$ DROP PROCEDURE IF EXISTS `procedure_course`$$ CREATE DEFINER=`top`@`%` PROCEDURE `procedure_course`()
BEGIN DECLARE c_user_login_id VARCHAR(); DECLARE done INT DEFAULT ;
##.定义游标stock_cursor 根据指定用户id
DECLARE stock_cursor CURSOR FOR SELECT ul.user_login_id FROM user_role_mapping urm,user_login ul WHERE ul.`USER_LOGIN_ID`=urm.`USER_LOGIN_ID` AND urm.`ROLE_ID` LIKE 'prom%';##获取prom所有用户id DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = ; OPEN stock_cursor;##.打开游标 cursor_loop: LOOP FETCH stock_cursor INTO c_user_login_id; ##.提取游标 IF done= THEN
LEAVE cursor_loop;
END IF; CALL procedure_del_msg_user(c_user_login_id); END LOOP cursor_loop;
CLOSE stock_cursor; ##关闭游标 END$$ DELIMITER ;
DELIMITER $$ USE `topsale`$$ DROP PROCEDURE IF EXISTS `procedure_del_msg_user`$$ CREATE DEFINER=`top`@`%` PROCEDURE `procedure_del_msg_user`(v_user_login VARCHAR())
BEGIN
DECLARE c_msg_role_id VARCHAR();
DECLARE c_count VARCHAR(); DECLARE done INT DEFAULT ; DECLARE stock_cursor CURSOR FOR SELECT t.msg_role_id FROM training_course c,t_msg_text t WHERE c.course_id=t.course_id AND c.creater_party_id='';##获取本部所有课件 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = ; OPEN stock_cursor; cursor_loop: LOOP FETCH stock_cursor INTO c_msg_role_id; IF done= THEN
LEAVE cursor_loop;
END IF; DELETE FROM t_msg_mapping WHERE msg_role_id=c_msg_role_id AND user_login_id=v_user_login;##删除消息映射表中prom的角色 END LOOP cursor_loop;
CLOSE stock_cursor;
END$$ DELIMITER ;
mysql存储过程使用游标循环插入数据的更多相关文章
- mysql存储过程批量向表插入数据
业务需要,往某个表中批量插入数据,使用存储过程插入 首先,要建立一张mysql表,表明为phone_number, 三个字段,id 自增,number 就是要插入的表格,is_used 表示十分已经使 ...
- MYSQL中创建存储过程实现向表中循环插入数据
首先在test数据库中先创建一个表test: CREATE TABLE test( ID INT PRIMARY KEY AUTO_INCREMENT ,test_name VARCHAR(20),t ...
- mysql存储过程之游标遍历数据表
原文:mysql存储过程之游标遍历数据表 今天写一个mysql存储过程,根据自己的需求要遍历一个数据表,因为对存储过程用的不多,语法不甚熟悉,加之存储过程没有调试环境,花了不少时间才慢慢弄好,故留个痕 ...
- Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer Advanced Installer :Free for 30 da ...
- mysql循环插入数据
实验中经常会遇到需要多条数据的情况就想到了用SQL语句循环生成数据 DROP PROCEDURE if EXISTS test_insert; DELIMITER ;; CREATE PROCEDUR ...
- MariaDB MariaDB、MySQL存储过程、游标基础应用举例说明
MariaDB.MySQL存储过程.游标基础应用举例说明 by:授客 QQ:1033553122 测试环境: MariaDB-10.0.19-centos7-x86_64 实践操作: # 创建测试数据 ...
- MySQL存储过程之游标实战
MySQL存储过程之游标实战 博主日前在解决一个项目需求时,没有什么好的方法,于是就来学习存储过程了,之前也是接触过,奈何年少贪玩,竟是全部又还给了大学老师-苦不堪言呐-. 先说一下业务需求吧 ...
- Linux C 调用MYSQL API 函数mysql_escape_string()转义插入数据
Title:Linux C 调用MYSQL API 函数mysql_escape_string()转义插入数据 --2013-10-11 11:57 #include <stdio.h> ...
- paginate()出来的数据怎样循环插入数据?
paginate()出来的数据怎样循环插入数据? paginate()分页如何转数组操作数据之后再转回对象? thinkphp5 model里面用toarray后怎么分页? 以上类似问题的出现,是因为 ...
随机推荐
- java打印一下九九乘法表
public class Multiplication { public static void main(String[] args) { printTable(); } // 打印九九乘法表 pu ...
- CentOS之文档的压缩与打包
.rar压缩文件linux中不识别,.zip在windows和Linux中动能使用. .gz:由gzip压缩工具压缩的文件 .bz2:bzip2压缩工具压缩的文件 .tar:由tar打包程序打包的文件 ...
- Java关键字final、static使用总结(转)
原文链接:Java关键字final, static一些要点 1. final final类不能被继承,没有子类,final类中的方法默认是final的 final方法不能被子类的方法复盖,但可以被 ...
- Unity中进程间通信——使用Protobuf-net序列化与反序列化
基于ProtoBuf协议实现网络传输(上) Protobuf 全称Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格 ...
- mysql的DATE_FORMAT参数格式
mysql有个字段是DATETIME类型,要实现可以按月统计,该怎么写sql语句?select month(f1) from tt group by month(f1)or select DATE_F ...
- 网络基础和python
·五层协议 物理层,数据链路层,网络层,传输层,应用层 ·用户上网流程 1.本机获取 2.打开浏览器,,输入网址. 3.dns协议(基于udp协议) 4.HTTP部分的内容 5 TCP协议 6 IP协 ...
- MySQL数据库的高可用方案总结
高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.虽然互联网服务号称7*24小时不间断服务,但多多少少有一些时候服务不可用,比如某些时候网页打不开,百度不能搜索或者无法 ...
- 「HNOI2015」开店(树链剖分, 主席树)
/* 考虑将所求的值拆分 记每个点到根的路径长度为dis_i, 那么我们要求的就是\sum_{i = l} ^ r dis_i + dis[u] * (r - l + 1) - 2\sum_{i = ...
- jmeter分布式压力测试实践+登录为例
1.一张分布式压力的图解,如下 准备: 1.两台slave 2.一个master 3.待测目标地址 http://XXX 准备环境:linux环境,master如果可以最好有可视化电脑界面,便于jmx ...
- (转)日期类型的input元素设置默认值为当天
原文地址 html5的form元素对日期时间有丰富的支持 <input type="date"> <input type="time"> ...