文档章节

Mysql 存储过程 游标 例子

程序猿之小菜鸟
 程序猿之小菜鸟
发布于 2016/03/14 16:42
字数 297
阅读 30
收藏 0
CREATE PROCEDURE solution_relative_pro()
BEGIN
	DECLARE done INT DEFAULT FALSE;
	DECLARE sid varchar(32);
	DECLARE rn int;
	DECLARE s_reply_cursor CURSOR FOR 
		select r.tid,count(1) as rn
		from tbl_cms_reply r
		where r.best = 3 and r.isdelete = 0
		group by r.tid;
	DECLARE s_like_cursor CURSOR FOR
		select l.target_id,count(1) as rn
		from tbl_cms_like l
		where l.like_type = 1 and l.`status` = 1
		group by l.target_id;
	DECLARE s_collect_cursor CURSOR FOR
		select c.target_id,count(1) as rn
		from tbl_cms_collection c
		where c.collect_type = 0 and c.`status` = 1
		group by c.target_id;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

	OPEN s_reply_cursor;
	read_loop:LOOP
		FETCH s_reply_cursor INTO sid,rn;
		IF done THEN
			LEAVE read_loop;
		END IF;
                update tbl_cms_solution s set s.reply = rn where s.id = sid;
	END LOOP;
	CLOSE s_reply_cursor;
	
	SET done = 0;
	SELECT CONCAT("s_reply_cursor executed ",done);
	
	OPEN s_like_cursor;
	read_loop:LOOP
		FETCH s_like_cursor INTO sid,rn;
		IF done THEN
			LEAVE read_loop;
		END IF;
		update tbl_cms_solution s set s.`like` = rn where s.id = sid;
	END LOOP;
	CLOSE s_like_cursor;

	SET done = 0;
	SELECT CONCAT("s_like_cursor executed ",done);

	OPEN s_collect_cursor;
	read_loop:LOOP
		FETCH s_collect_cursor INTO sid,rn;
		IF done THEN
			LEAVE read_loop;
		END IF;
		update tbl_cms_solution s set s.collect = rn where s.id = sid;
	END LOOP;
	CLOSE s_collect_cursor;

END

之前一直用Oracle,第一次写mysql的存储过程,语法不太一致,参考mysql官方文档 http://dev.mysql.com/doc/refman/5.7/en/cursors.html

其中declare handler的语法见 http://dev.mysql.com/doc/refman/5.7/en/declare-handler.html

在调试过程中,我们可能会需要像oracle那样使用dbms_output输出语句,在mysql中,我们使用 SELECT CONCAT("s_like_cursor executed ",done);来代替。


© 著作权归作者所有

程序猿之小菜鸟
粉丝 5
博文 56
码字总数 8876
作品 0
青岛
程序员
私信 提问
MySQL数据库新特性之存储过程入门教程

MySQL数据库新特性之存储过程入门教程 在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力。在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用户...

vga
2014/07/21
0
0
一点实例明白mysql数据库存储过程

mysql存储过程: 封装sql: create procedure p1()beginselect * from t_news;end $ //mysql存储过程 简单实例 显示存储过程信息: G (横向表格采用纵向表格输出) delimiter $ 改变执行符号,直...

zyt_1978
2016/09/19
3
0
MySQL Cursor在存储过程中的使用

MySQL Cursor在存储过程中的使用 游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作。 declares a cursor and associates it with a SELECT statement that retriev...

秋风醉了
2014/11/11
0
0
存储过程从定义开始

使用存储过程的优点有: (1)存储过程在服务器端运行,执行速度快。 (2)存储过程执行一次后,其执行规划就驻留在高速缓冲存储器,在以后的操作中,只需从高速缓冲存储器中调用已编译好的二...

leon_tan
2015/11/30
297
0
《MySQL必知必会》笔记2

2016/2/26-27 第二十一章创建和操纵表 创建表 CREATE TABLE语句 IF NOT EXISTS:查看表名是否存在,并且仅在表名不存在时创建它。 NULL列和NOT NULL列。(NULL为默认设置) PRIMARY KEY:定义...

fxdhdu
2016/03/01
35
0

没有更多内容

加载失败,请刷新页面

加载更多

ngrok 外网映射工具

ngrok介绍 许多刚学java web的同学(包括我自己)肯定都非常好奇,如何在外网上访问自己做的项目,跟我们本地访问tomcat有什么区别? 今天就向大家介绍一个非常强大的外网映射工具:ngrok.ngrok可以...

edison_kwok
30分钟前
1
0
Spark Streaming的优化之路——从Receiver到Direct模式

          作者:个推数据研发工程师 学长 1 业务背景 随着大数据的快速发展,业务场景越来越复杂,离线式的批处理框架MapReduce已经不能满足业务,大量的场景需要实时的数据处理结果来...

个推
今天
3
0
壮丽70年·奋斗新时代|蒸妙集团熏蒸中会阴熏蒸的神奇好处

聚结相合之处为会。会阴居两阴间,为督、任、冲三脉的起点,三脉背出两阴之间,会聚阴部,因名会阴。会阴,经穴名。出《针灸甲乙经》。会阴别名屏翳、下极、金门。属任脉。在会阴部,男性当阴...

公益传承
今天
2
0
pentaho-kettle-8.2.0.0-R源码开发环境搭建

1.从Kettle官网下载源码,本文使用的是pentaho-kettle-8.2.0.0-R 下载地址:https://codeload.github.com/pentaho/pentaho-kettle/zip/8.2.0.0-R 2.打开eclipse,选择一个新的工作空间,然后设...

gq_2010
今天
1
0
lua web快速开发指南(7) - 高效的接口调用 - httpc库

httpc库基于cf框架都内部实现的socket编写的http client库. httpc库内置SSL支持, 在不使用代理的情况下就可以请求第三方接口. httpc支持header、args、body、timeout请求设置, 完美支持各种h...

水果糖的小铺子
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部