SQL游标造数据

BEGIN
/*用于在姓名背后添加编号,并且记录循环次数*/
DECLARE i INT DEFAULT 0;
/*创建变量done,done=0表示还没有检索完,done=1表示检索完成*/
DECLARE done INT DEFAULT 0;
/*创建变量,保存查询结果中的姓名*/
DECLARE sname VARCHAR(30) DEFAULT '';
/*创建变量,保存插入数据中的姓名*/
DECLARE stuname VARCHAR(30) DEFAULT '';
/*总成绩*/
DECLARE sco INT DEFAULT 0;
/*学号*/
DECLARE sid INT DEFAULT 0;

/*为查询语句创建游标mycursor,用来检索查询结果*/
DECLARE mycursor CURSOR FOR SELECT student.sid,student.Sname,sum(score.score) from student LEFT JOIN score ON student.sid=score.sid GROUP BY student.sid;
/*每一次检索,都判断是否检索到记录,如果没有,则设置done=1,表示检索完成*/
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
/*打开游标,开始检索*/
OPEN mycursor;
/*循环,检索操作*/
REPEAT
/*将检索的内容,保存到变量*/
FETCH mycursor INTO sid,sname,sco; /*基于需要制造的数据的条数,进行内层循环,将姓名背后根据循环次数加上数字,并且将分数加上循环次数,插入到数据表中*/
while i < times DO
/*基于读取出的学生名进行拼接,拼接出刘一1这样的格式*/
set stuname=CONCAT(sname,i);
/*向结果表中插入数据,如果已经存在记录,则更新*/
INSERT INTO CScore VALUES (0,stuname,sco+i);
/*循环控制变量i自增*/
set i=i+1;
/*while循环体结束*/
end WHILE;
set i=0;
/*如果done=1,执行完成,则停止循环*/
UNTIL done END REPEAT;
/*关闭游标*/
CLOSE mycursor;

END

猜你喜欢

转载自www.cnblogs.com/wendy-0901/p/12978601.html