博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql存储过程中使用cursor
阅读量:5897 次
发布时间:2019-06-19

本文共 1654 字,大约阅读时间需要 5 分钟。

一、表

学生表

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

你可能感兴趣的文章
sencha touch巧妙使用请求超时提升用户体验
查看>>
15. 3Sum
查看>>
ArrayList源码解析
查看>>
基于SpringMVC、Maven以及Mybatis的环境搭建
查看>>
可见面判别算法---区域细分算法
查看>>
ViewPager Banner(广告墙)
查看>>
iOS开发20:Navigation Bar的简单设置
查看>>
iOS开发24:使用SQLite3存储和读取数据
查看>>
Yii2 Unable to verify your data submission 错误-CSRF
查看>>
angularjs-paste-upload
查看>>
解除 Linux 系统的最大进程数和最大文件打开数限制
查看>>
RXjs相关
查看>>
百练2973: Skew binary 数 之 Java 题解
查看>>
linux基础命令 head
查看>>
在模板中将php数组转换成js对象
查看>>
使用java调用FFMPEG进行转码
查看>>
克隆虚拟机以及互相登陆
查看>>
AES加密解密
查看>>
objective c:import和include的区别, ""和<>区别
查看>>
CentOS 6.5上部署drbd
查看>>