mysql存储过程 cursor_Mysql存储过程中使用cursor

一、表

学生表

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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值