开发者社区> 科技探索者> 正文

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

本文转自IT徐胖子的专栏博客51CTO博客,原文链接http://blog.51cto.com/woshixy/1423663如需转载请自行联系原作者


woshixuye111

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Mysql数据库基础第六章:变量、存储过程与函数
在mysql中,可以使用变量来存储查询或计算结果,类似python中的变量。在mysql中主要分为:系统变量和自定义变量
30 0
MySQL存储过程——批量插入数据
MySQL存储过程——批量插入数据
231 0
争议?MySQL存储过程与函数,封装,体,完整详细可收藏
争议?MySQL存储过程与函数,封装,体,完整详细可收藏
46 0
mysql批量插入数据的存储过程
mysql批量插入数据的存储过程
30 0
mysql存储过程repeat循环多循环一次
mysql存储过程repeat循环多循环一次
13 0
mysql存储过程下分割字符串函数
mysql存储过程下分割字符串函数
25 0
Mysql的索引、视图、触发器、存储过程(下)
Mysql的索引、视图、触发器、存储过程(下)
58 0
Mysql的索引、视图、触发器、存储过程(上)
Mysql的索引、视图、触发器、存储过程(上)
58 0
【MySQL】技多不压身,存储过程你会了吗?
今天我们来学习存储过程,在几年前的系统中存储过程随处可见,他的优势就是提高数据库的安全性和数据的完整性,我们可以利用存储过程完成一系列的流程而无需在代码中反复跳转,但是他的缺点也暴露了出来,开发与维护的难度时间越长难度越大,我们来看看他的神奇之处。
44 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
让 MySQL 原生分布式触手可及
立即下载
好的 MySQL 兼容可以做到什么程度
立即下载
云数据库RDS MySQL从入门到高阶
立即下载