> 数据库 > MySQL >

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

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得到courseName
select 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;##启动游标

REPEAT
  FETCH mycursor INTO classIdsNew;
  IF NOT done THEN

    set 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 的下面.


(责任编辑:IT)