1、表ide
學生表oop
CREATE TABLE `t_student` (spa
`stuNum` int(11) NOT NULL auto_increment,ci
`stuName` varchar(20) default NULL,rem
`birthday` date default NULL,it
PRIMARY KEY (`stuNum`)class
) ENGINE=InnoDB DEFAULT CHARSET=utf8date
學生分數表循環
CREATE TABLE `t_stu_score` (im
`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中。
2、過程
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 ;
3、調用過程
CALL proc_AddStuDetail(86);