第24章 使用游标
24.1 游标
游标,是一个select语句的查询结果集,用于交互式应用,如:滚动屏幕上的数据,浏览和修改数据。
在mysql中,游标只能用于存储过程和函数。
24.2 使用游标
使用游标的步骤:
1、声明游标:一次声明游标后,可多次打开和关闭游标。
2、打开游标:从服务器检索出数据结果集。一次打开游标后,可多次取出数据。
3、取出数据:按条件筛选、显示数据。
4、关闭游标
注意顺序:declare创建局部变量,要放在declare创建游标之前。
例:创建存储过程,查询所有订单含税合计金额,结果存储到一个表里:
delimiter //
create procedure processorders()
begin
-- 声明局部变量local variables
declare done boolean default 0; #变量名done(意思为:完成)
declare o int; #变量o(订单)
declare t decimal(8,2); #变量t(订单合计数)
-- 创建游标,定义游标内容为检索所有订单编号。
declare ordernumbers cursor for select order_num from orders;
-- 创建条件处理器
declare continue handler for sqlstate '02000' set done=1; #sql错误代码(sqlstate '02000')
-- 创建表,用于存储结果集。
create table if not exists ordertotals(order_num int,total decimal(8,2));
-- 打开游标,检索出数据放到内存。
open ordernumbers;
-- 遍历所有行loop through all rows
repeat
-- 取出数据订单编号
fetch ordernumbers into o;
-- 取得订单合计金额,调用上一章的存储过程
call ordertotal(o,1,t); #(订单编号,是否含税,订单合计金额)
-- 将前面取得的 订单编号和订单合计金额写入表
insert into ordertotals(order_num,total) values(o,t);
-- 遍历循环结束
until done end repeat;
-- 关闭游标,释放内存和资源。
close ordernumbers;
-- 隐含关闭,mysql到达end语句时,会自动关闭游标。
end//
delimiter ;
例:执行存储过程,并显示所有订单含税合计金额:
call processorders;
select * from ordertotals order by order_num;
《mysql必知必会》是一本好书,是一本sql语言入门书,豆瓣评分很高。
作者是英国的Ben Forta,世界知名的技术作家,由人民邮电出版社发行,我觉得原作名: MySQL Crash Course,直译为:《MYSQL速成》更具畅销书潜质,只是比较俗吧,呵呵。
书中从介绍简单的数据检索开始,逐步深入一些复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程、游标、触发器、表约束,等等。
前三章是基础概念,讲了SQL和数据库的基本概念,Mysql数据库的概念和使用方法,第四章开始SQL实操练习,这里是本书的一些实操练习笔记,有兴趣的话可以按这个练习几遍,相信对新手会很有帮助,让你不经意间功力大增。