项目需求:对表进行重新构建,这个用java的缺点是数据的传送以及遍历的话会消耗更多的资源,因此使用mysql的存储过程进行构建。
具体要求:跳过原本设置的假期和课程本身的假期对数据进行重排。
1.游标从创建到关闭的过程: 注意class_id1 的属性刚开始由declare设置的默认是空,但在打开游标之前只要给它重新赋值就不为空了。
DECLARE cc_2 CURSOR FOR SELECT id FROM pms_teach_example_day where class_id=class_id1 AND id>=(SELECT id FROM pms_teach_example_day WHERE class_id=class_id1 AND date is NULL ORDER BY id limit 1);
2.定义结束条件:02000是sql的状态码,意思是这条sql语句执行到最后了,当然在最开始的时候要定义done这个属性,默认值设为0,如果这个done属性还用在其他游标里,每次关闭游标前把done设置为0(重点),以下是定义结束条件的两种写法。
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
3.打开游标进行循环:循环也可以有两种:一种就是repeat 另一种就是loop,loop的好处是可以控制循环何时跳出,记得打开loop要跟着跳出loop和关闭loop的结束语句,另外,在这里边虽然没有写done 的值但是它默认结束后就会给你返回1,因此在关闭游标