Mysql存储过程中使用cursor

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                一、表
学生表
CREATE TABLE `t_student` (
   `stuNum` int(11) NOT NULL auto_increment,
   `stuName` varchar(20) default NULL,
   `birthday` date default NULL,
   PRIMARY KEY  (`stuNum`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8

学生分数表
CREATE TABLE `t_stu_score` (
   `id` int(11) NOT NULL auto_increment,
   `stuNum` int(11) default NULL,
   `score` decimal(6,2) default NULL,
   PRIMARY KEY  (`id`),
   KEY `FK_t_stu_score` (`stuNum`),
   CONSTRAINT `FK_t_stu_score` FOREIGN KEY (`stuNum`) REFERENCES `t_student` (`stuNum`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8

学生详细表
CREATE TABLE `t_stu_detail` (
   `id` int(11) NOT NULL auto_increment,
   `stuName` varchar(20) default NULL,
   `score` decimal(6,2) default NULL,
   PRIMARY KEY  (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8

将t_Student和t_stu_score表中满足一定条件的数据插入到t_stu_detail中。


二、过程
DELIMITER &&
 CREATE PROCEDURE proc_AddStuDetail( IN p_score DECIMAL(6,2) )
  BEGIN
DECLARE vstuNum INT;
DECLARE vstuName VARCHAR(20);
DECLARE vbirthday DATE;
DECLARE vscore DECIMAL(6,2);
DECLARE done INT;

-- 定义游标
DECLARE stuCursor CURSOR
FOR
SELECT stuNum,stuName,birthday FROM t_Student;

-- 定义结束标记
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

-- 打开游标
OPEN stuCursor;

-- 循环
stuLoop:LOOP
-- 取游标中的数据
FETCH stuCursor INTO vstuNum,vstuName,vbirthday;
IF done = 1 THEN
LEAVE stuLoop;
END IF;

IF DATE(vbirthday) >= '1990-03-01' THEN
SELECT score INTO vscore FROM t_stu_score WHERE stuNum = vstuNum;
IF vscore >= p_score THEN
INSERT INTO t_stu_detail VALUES(NULL,vstuNum,vscore);
END IF;
END IF;
END LOOP stuLoop;

-- 关闭游标
CLOSE stuCursor;
  END
&&
DELIMITER ;

三、调用过程
CALL proc_AddStuDetail(86);
           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/hdsghtj/article/details/83956273
今日推荐