MySQL 中的三中循环 while loop repeat 的基本用法

-- MySQL中的三中循环 while 、 loop 、repeat  求  1-n 的和-- 第一种 while 循环 
-- 求 1-n 的和
/*  while循环语法:
while 条件 DO循环体;
end while;
*/
-- 实例:
create procedure sum1(a int) 
begindeclare sum int default 0;  -- default 是指定该变量的默认值declare i int default 1;
while i<=a DO -- 循环开始set sum=sum+i;set i=i+1;
end while; -- 循环结束
select sum;  -- 输出结果
end
-- 执行存储过程
call sum1(100);
-- 删除存储过程
drop procedure if exists sum1-- 第二种 loop 循环
/*loop 循环语法:
loop_name:loopif 条件 THEN -- 满足条件时离开循环leave loop_name;  -- 和 break 差不多都是结束训话end if;
end loop;
*/-- 实例:
create procedure sum2(a int)
begindeclare sum int default 0;declare i int default 1;loop_name:loop -- 循环开始if i>a then leave loop_name;  -- 判断条件成立则结束循环  好比java中的 boeakend if;set sum=sum+i;set i=i+1;end loop;  -- 循环结束select sum; -- 输出结果
end
-- 执行存储过程
call sum2(100);
-- 删除存储过程
drop procedure if exists  sum2-- 第三种 repeat 循环
/*repeat 循环语法
repeat循环体
until 条件 end repeat;
*/-- 实例;
create procedure sum3(a int)
begindeclare sum int default 0;declare i int default 1;repeat -- 循环开始set sum=sum+i;set i=i+1;until i>a end repeat; -- 循环结束select sum; -- 输出结果
end-- 执行存储过程
call sum3(100);
-- 删除存储过程
drop procedure if exists sum3

 

存储过程加游标一起使用的基本操作

-- 存储过程  加  游标-- 建表
create table student(
sid varchar(8) primary key,
sname varchar(10),
sex varchar(2),
age int,
classno varchar(6)
);
-- 表中的数据
insert into student values
('20170101','张石瑞','','19','201701'),
('20170201','李佛','','20','201702'),
('20170202','王法无','','19','201702')/* 创建游标和关闭游标的四个步骤
-- 1、创建游标  (cur_name 游标名字)
declare cur_name cursor for select 语句;
-- 2、打开游标
open cur_name;
-- 3、提取游标数据
fetch cur_name [into 变量1,变量2,、、、、、];
-- 4、关闭(释放)游标
close cur_name;
*/
-- 游标的基本提取操作
create PROCEDURE proc1()
BEGIN
declare cur_sid varchar(20);
declare cur_sname varchar(20);
declare cur_sex varchar(20);
declare cur_age varchar(20);
declare cur_classno varchar(20);
-- 1、
declare student_cur1 CURSOR for
select sid,sname,sex,age,classno from student;
-- 2、
open student_cur1;
-- 3、
fetch student_cur1 into cur_sid,cur_sname,cur_sex,cur_age,cur_classno;
select cur_sid,cur_sname,cur_sex,cur_age,cur_classno;
-- 4、
close student_cur1;
END-- 执行存储过程
call proc1();
-- 删除存储过程
drop procedure if exists proc1-- 游标的循环遍历‘
create PROCEDURE proc2()
BEGIN
declare cur_sid varchar(20);
declare cur_sname varchar(20);
declare cur_sex varchar(20);
declare cur_age varchar(20);
declare cur_classno varchar(20);declare sum int default 0;
declare i int default 0;
-- 1、
declare student_cur1 CURSOR for
select sid,sname,sex,age,classno from student;
-- 2、
open student_cur1;
-- 3、 最简单的  while 遍历方法
select count(sid) into sum from student;
while i<sum DOfetch student_cur1 into cur_sid,cur_sname,cur_sex,cur_age,cur_classno;select cur_sid,cur_sname,cur_sex,cur_age,cur_classno;set i=i+1;
end while;
-- 4、
close student_cur1;
END-- 执行存储过程
call proc2();
-- 删除存储过程
drop procedure if exists proc2-- 使用 loop 遍历游标
create PROCEDURE proc3()
BEGIN
declare cur_sid varchar(20);
declare cur_sname varchar(20);
declare cur_sex varchar(20);
declare cur_age varchar(20);
declare cur_classno varchar(20);declare state int default false; -- 定义表示用于判断游标是否溢出
-- 1、
declare student_cur1 CURSOR for
select sid,sname,sex,age,classno from student;
-- 2、
open student_cur1;
-- 3、 loop 遍历游标
cur_loop:loop -- 循环开始
-- 循环开始的时候提取一次fetch student_cur1 into cur_sid,cur_sname,cur_sex,cur_age,cur_classno;select cur_sid,cur_sname,cur_sex,cur_age,cur_classno;if state thenleave cur_loop; end if; 
end loop; -- 循环结束
-- 4、
close student_cur1;
END-- 执行存储过程
call proc3()
-- 删除存储过程
drop procedure if exists proc3/*
fetch是获取游标当前指向的数据行,并将指针指向下一行,当游标已经指向最后一行时继续执行会造成游标溢出。
使用loop循环游标时,他本身是不会监控是否到最后一条数据了,像下面代码这种写法,就会造成死循环;read_loop:loop  
fetch cur into n,c;  
set total = total+c;  
end loop;  
在MySql中,造成游标溢出时会引发mysql预定义的NOT FOUND错误,所以在上面使用下面的代码指定了当引发not found错误时定义一个continue 的事件,指定这个事件发生时修改done变量的值。declare continue HANDLER for not found set done = true;  
也有这样写的
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' set done = true; 
所以在循环时加上了下面这句代码:--判断游标的循环是否结束  
if done then  leave read_loop;    --跳出游标循环  
end if;  
如果done的值是true,就结束循环。继续执行下面的代码。*/-- 性别翻转create PROCEDURE proc4()
BEGIN
declare cur_sid int;
declare cur_sex varchar(1);declare state int default false;
-- 1、
declare sex_cur cursor for select sid,sex from student;
-- 
declare CONTINUE HANDLER for not found set state=true;
-- 2、
open sex_cur;
-- 3、
sex_loop:LOOP -- 循环开始fetch sex_cur into cur_sid,cur_sex;if state thenleave sex_loop;end if;if cur_sex='' thenupdate student set sex='' where sid=cur_sid;end if;if cur_sex='' thenupdate student set sex='' where sid=cur_sid;end if;
end loop; -- 循环结束
-- 4、
close sex_cur;
END-- 执行存储过程
call proc4()
-- 删除存储过程
drop procedure if exists proc4-- 表的查询
select * from student

http://www.cnblogs.com/Lvhengshuai/category/997161.html

转载于:https://www.cnblogs.com/Luouy/p/7301360.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css渲染(二) 文本

一、文本样式 首行缩进  text-indent 首行缩进是将段落的第一行缩进&#xff0c;这是常用的文本格式化效果。一般地&#xff0c;中文写作时开头空两格。[注意]该属性可以为负值&#xff1b;应用于: 块级元素(包括block和inline-block)  <div><p style"text-in…

RTKLIB的主要功能

RTKLIB是全球导航卫星系统GNSS(global navigation satellite system)的标准&精密定位开源程序包&#xff0c;RTKLIB由日本东京海洋大学&#xff08;Tokyo University of Marine Science and Technology&#xff09;的高须知二&#xff08;Tomoji Takasu&#xff09;开发。R…

28岁学python转行_28岁转行程序员,学Java还是Python?码农:想快点月薪过万就选它...

为什么要学Java&#xff1f;Python给人的印象简单是因为我们在用Python的时候&#xff0c;可以直接调用别人已经写好的代码接口就可以&#xff0c;相对于傻瓜模式&#xff0c;Java的许多处理都要原生很多&#xff0c;写的代码可能会多一些&#xff0c;但一旦完成封装&#xff0…

使用SSL和Spring Security保护Tomcat应用程序的安全

如果您看过我的上一个博客&#xff0c;您会知道我列出了Spring Security可以做的十件事 。 但是&#xff0c;在认真开始使用Spring Security之前&#xff0c;您真正要做的第一件事就是确保您的Web应用使用正确的传输协议&#xff0c;在这种情况下为HTTPS –毕竟&#xff0c;没有…

模块 hashlib模块

hashlib模块 提供摘要算法 主要做对比&#xff0c;比较两段代码是否完全一致 不管算法多么不同&#xff0c;摘要功能始终不变&#xff0c; 对同一个字符串进项同一算法摘要得到的值始终不变 MD5值的生成 import hashlib sha1 hashlib.md5() #一定加括号 sha1.update(bytes(a…

css渲染(一) 字体

一、字体属性 1.默认字体系列 chrome/opera:"宋体" firefox:"微软雅黑" safari/IE:Times,"宋体" 2.字体属性 字体类型 font-family  初始化时定义字体类型&#xff0c;如宋体 font-family: arial&#xff0c;“宋体”,“微软雅黑”;   /…

使用SynchronousQueue实现生产者/消费者

Java提供了许多用于并发支持的有用类中&#xff0c;有一个我想谈一谈&#xff1a; SynchronousQueue 。 特别是&#xff0c;我想通过使用方便的SynchronousQueue作为交换机制来完成Producer / Consumer实现。 除非我们了解SynchronousQueue实现的内幕&#xff0c;否则可能不清…

python含多个附件的邮件_Python发送带有多个图像附件的电子邮件

我试图用Python发送一封带有多个图像附件的电子邮件。但是通过下面的代码&#xff0c;我可以在正文中包含第一个图像&#xff0c;但是第二个图像会作为附件附加到电子邮件中。有没有办法可以在HTML的主体中同时获得这两个图像&#xff1f;下面是我当前的代码。在from email.mim…

Oracle存储过程总结

1.存储过程结构 ":"是赋值语句 如: l_name :sky;..."" 是判断是否相等. 如: if 11 then...":" 是变量绑定 如: if :P_NAME sky then... 1.1 第一个存储过程 create or replace procedure proc1( para1 varchar2, para2 out varchar2, para3 in…

图表测试点

测试点1&#xff0c;默认状态下&#xff0c;时间和时间插件还有图表显示一致2&#xff0c;看各种表&#xff08;折线图&#xff0c;柱状图&#xff0c;等&#xff09;与下表格显示一致3&#xff0c;数据库里的与页面上的数据位置显示的数据一致&#xff0c;点击页面 默认的折线…

CSS布局(五) 网页布局方式

网页实质是块与块之间的位置&#xff0c;块挨着块&#xff0c;块嵌套块&#xff0c;块叠着块。 三种关系&#xff1a;相邻&#xff0c;嵌套&#xff0c;重叠。 下面介绍网页布局的常用几种方式 1.一列布局&#xff1a; 一般都是固定的宽高&#xff0c;设置margin : 0 auto来水…

使用Mozilla Persona认证用户的指南

到目前为止&#xff0c;只有Twitter和Facebook身份验证&#xff0c;我决定将Mozilla Persona添加到我最新项目&#xff08; 计算机 &#xff0c;计算机生成的音乐&#xff09;的列表中。 为什么&#xff1f; 我喜欢尝试新事物 存储密码是一个艰巨的过程&#xff0c;尽管我知道…

python字典与json转换_python字典与json转换的方法总结

在python中json分别由列表和字典组成&#xff0c;本文主要介绍python中字典与json相互转换的方法。使用json.dumps可以把字典转成json字符串。使用json.loads可以把json字符串转为字典类型的数据。1、字典转json使用json.dumpsjson.dumps是对python对象编码成json对象&#xff…

变量声明declare,简单运算符运算,变量测试与内容替换

declare -/ 选项 变量名 - 设类型 取消类型 -i 设为整型 -x 设为环境变量 -p 显示类型属性&#xff08;property&#xff09; [rootlocalhost ~]# a1 [rootlocalhost ~]# declare -p a declare -- a"1" [rootlocalhost ~]# export a [rootlocalhost ~]# declare -p …

如何水平居中一个元素

在项目中经常会遇到居中问题&#xff0c;这里借鉴度娘的众多答案&#xff0c;做一个总结&#xff1a; 一、元素的水平居中 1、行级元素的水平居中 <div style"width: 200px;height: 100px;border: 1px solid cyan; text-align: center;"><span>行级元素…

Yammer Metrics,一种监视应用程序的新方法

当您运行诸如Web应用程序之类的长期应用程序时&#xff0c;最好了解一些关于它们的统计信息&#xff0c;例如&#xff0c;服务的请求数&#xff0c;请求持续时间或活动请求数。 但是还有一些更通用的信息&#xff0c;例如内部集合的状态&#xff0c;代码的某些部分被执行了多少…

mysql教程目录_MySql目录(二)

MySql索引(二) 转自&#xff1a; http://www.cnblogs.com/dreamhome/archive/2013/04/16/3025304.html 所有MySQL列类型可以被索引。根据存储引擎定义每个表的最大索引数和最大索引长度。 所有存储引擎支持每个表至少16个索引&#xff0c;总索引长度至少为256字节。大多数存储引…

solr和Lucene的配置方式和应用

solr字段类型 类说明BinaryField二进制数据BoolField布尔值&#xff0c;其中’t’/’T’/’1’都是trueCollationFiled支持Unicode排序CurrencyField支持货币和汇率DateRangeFiled支持索引date rangeExternamFiledFiledpull磁盘上的文件EnumField支持定义枚举值ICUCollationFie…

PostgreSQL 9.6 keepalived主从部署

## 环境&#xff1a; PostgreSQL版&#xff1a;9.6 角色 OS IPmaster CentOS7   10.100.12.73 slave CentOS7 10.100.12.74 vIP 10.1…

CSS——清除浮动的六种解决方案

内容的高度撑起父元素容器的高度&#xff0c;效果图如下HTML和CSS代码如下给&#xff50;标签加上浮动以后&#xff0c;&#xff50;&#xff5b;float&#xff1a;left&#xff1b;&#xff5d;&#xff0c;此时DIV塌陷&#xff0c;两段内容同行显示&#xff0c;效果如下&…