好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Mysql存储过程中使用cursor - mysql数据库栏目 - 自学

一、表 学生表 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);

查看更多关于Mysql存储过程中使用cursor - mysql数据库栏目 - 自学的详细内容...

  阅读:39次