最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

关于游标,这两点你忽略了吗

来源:懂视网 责编:小采 时间:2020-11-09 14:22:21
文档

关于游标,这两点你忽略了吗

关于游标,这两点你忽略了吗:今天写个稍微复杂一点点的存储过程碰到两个容易忽略的点分享一下。如果有筒子刚好碰到相同的问题可以少再纠结一下, 木有啥技术含量的。 1、一个存储过程使用游标的例子 假设很简单的一个要求:从t表里面遍历出f,然后再到t2表中查找符合条件的记录打出
推荐度:
导读关于游标,这两点你忽略了吗:今天写个稍微复杂一点点的存储过程碰到两个容易忽略的点分享一下。如果有筒子刚好碰到相同的问题可以少再纠结一下, 木有啥技术含量的。 1、一个存储过程使用游标的例子 假设很简单的一个要求:从t表里面遍历出f,然后再到t2表中查找符合条件的记录打出

今天写个稍微复杂一点点的存储过程碰到两个容易忽略的点分享一下。如果有筒子刚好碰到相同的问题可以少再纠结一下, 木有啥技术含量的。。 1、一个存储过程使用游标的例子 假设很简单的一个要求:从t表里面遍历出f,然后再到t2表中查找符合条件的记录打出

今天写个稍微复杂一点点的存储过程碰到两个容易忽略的点分享一下。如果有筒子刚好碰到相同的问题可以少再纠结一下, 木有啥技术含量的。。

1、一个存储过程使用游标的例子

假设很简单的一个要求:从t表里面遍历出f,然后再到t2表中查找符合条件的记录打出来。

  1. declare stopFlag int;
  2. DECLARE cur_name CURSOR for f from t;
  3. DECLARE CONTINUE HANDLER FOR NOT FOUND set stopFlag=1;
  4. set stopFlag=0;
  5. open cur_name;
  6. REPEAT
  7. FETCH cur_name INTO temp_f;
  8. begin
  9. select f3 into my_result from t2 where f2=temp_f limit 1;
  10. end;
  11. UNTIL stopFlag = 1
  12. END REPEAT;
  13. CLOSE cur_name;

2、 点1

假设t表有n条记录,这个循环体循环n次?

实际上是n+1次。因为到达t的最后一行的时候stopFlag还是1。这个值的修改是在下一次fetch的时候改的,但是改完后就进入begin了,没有再判断,所以会多执行一次。这多出来的一次的temp_f的值和上一次相同。

解决方法:在进入Begin之后再判断一下stopFlag的值

3、 点2

有时候会发现没有循环到n次循环就退出,什么原因?

原因是如果select f3 into my_result from t2 where f2=temp_f limit 1; 条件无法匹配行,在试图对my_result赋值的时候就会触发set stopFlag=1; 导致在之后的until判断的时候满足退出条件而退出。

解决方法:特别小心循环体内部出现的这种语句。如果有的话,在进入begin之后把stopFlag存入一个临时变量,在until之前把这个临时变量赋回去就行了

原文链接:http://dinglin.iteye.com/blog/1181109

文档

关于游标,这两点你忽略了吗

关于游标,这两点你忽略了吗:今天写个稍微复杂一点点的存储过程碰到两个容易忽略的点分享一下。如果有筒子刚好碰到相同的问题可以少再纠结一下, 木有啥技术含量的。 1、一个存储过程使用游标的例子 假设很简单的一个要求:从t表里面遍历出f,然后再到t2表中查找符合条件的记录打出
推荐度:
标签: 今天 写个 存储
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top