今天在家里写一个mysql存储过程,因为性能的原因使用了游标,但是问题就从这里出现了。
游标遍历表大概有50w+的数据,遍历出来经过几个表的查询将结果集合插入另外一个表中,但是执行的结果只有一条数据插入结果表,开始以为是条件判断造成,检查每一步判断,没有找到问题,将中间处理过程去掉只进行数据遍历,发现一切正常,问题可能出在处理过程中。经检查发现 当在游标循环过程中select的结果集如果为空,就会触发游标continue handler for not found 提前将done置为1,导致提前退出游标。
  解决办法:
                1、当结果集中有空的情况下使用select count(*) 使其结果不为空
                2、不使用select对可能有空结果表进行查询