mysql 游标的使用总结
2024-08-30 23:57:33
一、游标的基本概念
游标:游标是一个存储在Mysql服务器上的数据库查询,它不是一条select语句,而是被该语句检索出来的结果集。
本人,学习游标中,曾遇到一个问题,循环总是最后多执行一次。下面分析程序,这个是一个sql脚本程序
#if d=0 then #end if; 注释掉这两行时,会发现,游标中的repeat循环总是多执行一次。
vendors 表中之前的数据为:
图1
二、程序及结果分析
delimiter //
create procedure procursor(in num int)
begin
declare d boolean default 0;
declare o int;
declare t int;
declare c int default 0;
declare mycur cursor for select vend_id from vendors;
declare continue handler for sqlstate '02000' set d =1 ;
create table if not exists results(re_id int,re_num int);
open mycur;
repeat
fetch mycur into o;
#if d=0 then
select o;
# set t=o*num;
insert into results values(o,num*o);
set c=c+1;
select d;
# end if;
until d end repeat;
close mycur;
select * from results;
select c;
end //
delimiter ;
注释 #if d=0 then 和# end if; 执行以上sql语句后,call procursor(100); 执行结果如图2所示;发现,游标的循环总是多执行了一次,执行了4次,
分析发现,原因在于,最后一次fetch mycur into o;时,mycur 为空 ,o值未更改,所以,最后一组值,多执行了一次。此时若检测d的值,发现d为1。将#if d=0 then和# end if;注释去掉,做一个条件判断后的结果如图3所示。
结果正确
图2 图3
最新文章
- effective java —— 终结方法守卫者
- 第四章 一切从IL开始
- BZOJ4299 : Codechef FRBSUM
- UIKit结构图
- SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-006-定义切面使用xml
- jQuery AJAX实现调用页面后台方法
- Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql、oracle...)间进行数据的传递
- SDK编程模板
- [WPF]解决ListView在没有Items时,水平滚动条不出现的问题
- 如何用九条命令在一分钟内检查Linux服务器性能?
- 使用cxf创建webservice 出现timeOut的问题,设置spring超时时间
- 北大青鸟Asp.net之颗粒归仓
- [Swift]LeetCode49. 字母异位词分组 | Group Anagrams
- SQL开发——SQL语法
- python库函数Map, Filter and Reduce的用法
- January 19th, 2018 Week 3rd Friday
- Android Bitmap 缩放 旋转 水印 裁剪操作
- Python 私有方法和引用计数初讲
- VS代码页到设计页传值
- iOS开发消息推送原理