一、游标的基本概念

游标:游标是一个存储在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

最新文章

  1. effective java —— 终结方法守卫者
  2. 第四章 一切从IL开始
  3. BZOJ4299 : Codechef FRBSUM
  4. UIKit结构图
  5. SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-006-定义切面使用xml
  6. jQuery AJAX实现调用页面后台方法
  7. Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql、oracle...)间进行数据的传递
  8. SDK编程模板
  9. [WPF]解决ListView在没有Items时,水平滚动条不出现的问题
  10. 如何用九条命令在一分钟内检查Linux服务器性能?
  11. 使用cxf创建webservice 出现timeOut的问题,设置spring超时时间
  12. 北大青鸟Asp.net之颗粒归仓
  13. [Swift]LeetCode49. 字母异位词分组 | Group Anagrams
  14. SQL开发——SQL语法
  15. python库函数Map, Filter and Reduce的用法
  16. January 19th, 2018 Week 3rd Friday
  17. Android Bitmap 缩放 旋转 水印 裁剪操作
  18. Python 私有方法和引用计数初讲
  19. VS代码页到设计页传值
  20. iOS开发消息推送原理

热门文章

  1. Raid 6与raid 5的区别
  2. Array - Merge Sorted Array
  3. 使用EventLog组件向本机现有日志中添加条目
  4. 2018.4.17 java多线程练习二模拟开场仪式进场
  5. python_101_类方法
  6. Java中线程的通讯
  7. DateTime与long互转
  8. 2d游戏中求出一个向量的两个垂直向量
  9. c++ 函数指针应用,定义一个方法,传入两个参数和一个函数指针,并返回结果
  10. 初学redis,redis基本数据类型