mysql存储过程用游标解决返回的结果级并拼装字符

来源:互联网 发布:网络电玩 编辑:程序博客网 时间:2024/04/30 04:44

1.昨天遇到到一个问题.提问没有人回复,那个郁闷啊,无奈只有自己晚上回去自己解决. 

得出解决办法,希望可以帮到和我遇到同意问题的同学们.也当自己的笔记记录吧.

BEGIN##输入参数 '',29(用户id),'zxx-sxjcjy-34752-34752-34754-29'(courseid)  DECLARE done INT DEFAULT 0;DECLARE classIds varchar(500) DEFAULT ''; ##班级id字符型DECLARE classIdsNew varchar(500) DEFAULT '';DECLARE classIdsAll varchar(500) DEFAULT '';DECLARE classIdsAllNew varchar(500) DEFAULT '';## classIds 截取字符后的  aa,bb  形式DECLARE dateNew LONG; ##当前时间long型DECLARE dateNewString VARCHAR(100) DEFAULT ''; ##当前时间 DECLARE endDateString VARCHAR(100) DEFAULT ''; ##结束时间 :比当前时间多 7天##创建游标DECLARE mycursor CURSOR FOR select teaching_class_id from sxjcjy_t_teaching_class_user_relation where user_id = userId and course_id = courseId;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done =1;##把当前系统时间转为long型 以便下面使用set dateNew = UNIX_TIMESTAMP(curdate()) *1000;##得到当前系统时间 2013-09-29 15:46:59 型 下面用set dateNewString = NOW();##结束时间 :比当前时间多 7天 下面添加数据时用set endDateString = date_add(NOW(), interval 7 Day);##给讨论里面插入数据##1.根据courseId和userId得到courseNameselect course_name into courseName from sxjcjy_t_course_user_relation where course_id = courseId and user_id = userId limit 1;##2.根据courseId和userId得到学科下的classId(字符串)多个OPEN mycursor;##启动游标REPEATFETCH mycursor INTO classIdsNew;IF NOT done THENset classIdsNew = CONCAT(classIdsNew,",");set classIdsAll = CONCAT(classIdsAll,classIdsNew);##合并字符串set classIdsAllNew = `LEFT`(classIdsAll,LENGTH(classIdsAll)-1);##截取字符串END IF;UNTIL done END REPEAT;CLOSE mycursor;insert into sxjcjy_t_bbs_topic(course_id,course_name,title,creater_id,creater_name,content,view_count,create_time,class_id)values(courseId,courseName,'信息技术基础上完后大家觉得都学到些什么呢?',userId,userName,'信息技术基础上完后大家觉得都学到些什么呢?',0,dateNew,classIdsAllNew);END
1.原因是insert into 语句里面有个字段是  aa,bb  这中存储的,所以需要拼接字符串.(木有办法啊,淫家数据库是这样设计的)
2.注:DECLARE这种声明的变量包括游标 都必须在存过的最上面,BEGIN 的下面.