下午弄个存储过程,因为性能要求,重写了下,功能和影响范围应该一样,但是实际执行结果却不一样:一个操作了94条数据,一个操作了299条数据。倒腾半天,百思不得其解。
后来,增加变量,统计遍历数量,发现第一遍历了5w+,第二个遍历了23w+。靠,循环提前退出!上网google,找到这么一句话:当游标中循环中的SELECT语句查询结果为空时,会抛出一个'02000'状态而使得done标志变量提前置为1,从而使得循环结束。
的确,提前结束循环的存储过程循环中,的确有select。
解决:1、不用select;2、让结果永远不为空,例如select count(*),……
倒腾半天,记在这里,分享给大家。