一、表
学生表
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);
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn