[终章]进阶20-流程控制结构--if/case/while结构 - 三个while的存储过程案例(批量生成表单数据) - 随机长度的随机字符串的存储过程案例

1. mysql 存储过程中尽量使用 @变量 而不用局部变量, @变量不容易报错!权限小,更改一下就报错!
2. sql中判断相等‘=‘ ,用‘=‘ 不用‘==‘.
3.
#流程控制结构
/*
顺序结构: 程序从上往下依次执行;
分支结构: 程序从多条路径中选择一条往下执行
循环结构: 程序在满足一定条件的基础上,重复执行一段代码

*/

#一: 分支结构

#if 函数 : 实现简单的双分支
/*语法: 实现简单的双分支
    if(表达式1,表达式2,表达式3)
    执行顺序:
    如果表达式1成立, 则if函数返回表达式2的值, 否则返回表达式3的值
*/

#2.case 结构
/*
情况1: 类似于java中的switch 语句,一般用于实现等值判断;

语法: case 变量/表达式/字段
    when 要判断的值1 then 返回的值1
    when 要判断的值2 then 返回的值2
    when 要判断的值3 then 返回的值3
    ....
    else 要返回的值n
    end

情况2: 类似于java中的多重IF 语句,一般用于实现区间的判断

语法:
    case
    when 要判断的条件1 then 返回的值1或者语句1;
    when 要判断的条件2 then 返回的值2或者语句2;
    ...
    else 要返回的值n或语句n;     #可以省略else
    end case;

特点:
    1)可以作为表达式,嵌套在其他语句中使用,可以放在任何地方, begin end 中,或 begin end 的外面
    2)可以作为独立的语句去使用,只能放在begin end中
    3)如果when中的某一项值满足条件或者条件成立,则执行对应的then后面的语句,并且结束case
      如果都不满足,则执行else 语句
    4)else可以省略,
*/

#案例:

#创建存储过程,根据传入的成绩,来显示等级,比如传入的成绩: 90-100,显示A; 80-90,显示B;60-80显示C;否则显示D;
DELIMITER $
CREATE PROCEDURE test_case(IN score INT)
BEGIN
    CASE
    WHEN score>=90 AND score <=100 THEN SELECT ‘A‘;
    WHEN score>=80 THEN SELECT ‘B‘;
    WHEN score>=60 THEN SELECT ‘C‘;
    ELSE SELECT ‘D‘;
    END CASE;
END $

CALL test_case(95) $  #A
CALL test_case(55) $  #D

#3:if 结构, 实现多重分支
/*
语法:
    if 条件1 then 语句1;
    elseif 条件2 then 语句2;
    ...
    [else 语句n;]
    end if;
应用场合: 只能在begin /end 中
*/

#案例1:根据传入的成绩,来显示等级,比如传入的成绩: 90-100,返回A; 80-90,返回B;60-80返回C;否则返回D;
DELIMITER $
CREATE FUNCTION test_if(score INT) RETURNS NVARCHAR(10)
BEGIN
    IF score>=90 AND score<=100 THEN RETURN ‘A‘;
    ELSEIF score>=80 THEN RETURN ‘B‘;
    ELSEIF score>=60 THEN RETURN ‘C‘;
    ELSE RETURN ‘D‘;
    END IF;
END $

SELECT test_if(66) $   #C

#二: 循环结构
/*
分类: while/loop/repeat

循环控制:
    结束本次循环进行下一次:  iterate 类似于continue
    结束当前所在的循环结构 :     leave  类似于break
    IF 条件 THEN LEAVE 标签名;
    END IF;
*/

#1.while   ****重点
/*语法:
    [标签(名字):]while 循环条件 do
        循环体;
    end while[标签名];
*/

#2.loop
/*
语法:
[标签:]loop
    循环体;
 end loop[标签];
  #需要搭配leave跳出死循环!
 #常用来表示模拟单纯的死循环
*/

#3.repeat
/*
语法:
[标签名:]repeat
    循环体;
util 结束循环的条件;
end repeat [标签];
*/

#案例1(简单while循环): 批量插入,根据次数插入到admin 表中的多条记录
DELIMITER $
CREATE PROCEDURE 批量插入1(IN insertCount INT)
BEGIN
    DECLARE i INT DEFAULT 1;
    wa: WHILE i<=insertCount DO
        INSERT INTO admin(username,`password`) VALUES(‘Rose‘+i,‘660‘);
        SET i=i+1;
    END WHILE wa;

END $

CALL 批量插入1(100) $

#案例2(LEAVE(break循环的)+while循环): 批量插入,根据次数插入到admin 表中的多条记录,; 如果次数大于20,则停止插入数据
TRUNCATE TABLE admin;
DELIMITER $
CREATE PROCEDURE 批量插入2(IN insertCount INT)
BEGIN
    DECLARE i INT DEFAULT 1;
    wa: WHILE i<=insertCount DO
        INSERT INTO admin(username,`password`) VALUES(164215000+i,‘123456‘);
        IF i>=20 THEN LEAVE wa;
        END IF;
        SET i=i+1;
    END WHILE wa;

END $

CALL 批量插入2(100) $

#案例3(iterate(continue)+while循环): 批量插入,根据次数插入到admin 表中的多条记录; 仅仅偶数学号插入.
TRUNCATE TABLE  admin;

DELIMITER $
CREATE PROCEDURE 批量插入5(IN insertCount INT)
BEGIN
    DECLARE i INT DEFAULT 0;
    wa: WHILE i<=insertCount DO
        SET i=i+1;
        IF i%2=1 THEN ITERATE wa;
        END IF;
        INSERT INTO admin(username,`password`) VALUES(164215000+i,‘123456‘);
    END WHILE wa;

END $

CALL 批量插入5(60) $

###############################################
/*案例一:已知表StringContent ,向该表插入指定的个数的随机长度的随机字符串[1,20]
        ****随机模式-先随机长度,然后再从字母表中取出一个字符加进已有的字符串
其中字段:
id 自增长, content varchar(20)
*/

CREATE TABLE StringContent(
    id INT PRIMARY KEY AUTO_INCREMENT ,
    content VARCHAR(20)
);

DELIMITER $
CREATE PROCEDURE test_randstr_insert4(IN nums INT)
BEGIN
    #select concat(‘共插入‘,nums,‘条数据‘);
    SET @i = 0;
    SET @table_str =‘abcdefghijklmnopqrstuvwxyz‘;

    a:WHILE @i<nums DO
        SET @i=@i+1;
        SET @s2str = ‘‘;
        SET @len = CEILING(RAND()*15);  #代表字符长度 ,共需要循环随机产生len次数据
        SET @j = 0;
        b:WHILE @j<@len+1 DO
            SET @j=@j+1;
            SET @s2str = CONCAT(@s2str ,SUBSTR(@table_str,CEILING(RAND()*26),1) );
        END WHILE b;
        INSERT INTO `stringcontent`(id,content) VALUES(@i,@s2str);
    END WHILE a;
END $

CALL test_randstr_insert4(FLOOR(RAND()*100)+1) $

SELECT RAND();  #0.41551091188146816
SELECT FLOOR(RAND()*100);   #FLOOR 函数返回小于或等于所给数字表达式的最大整数, 获取[0,99]之间的数值
SELECT CEILING(RAND() * 100); #CEILING 函数返回大于或等于所给数字表达式的最小整数, 获取[1,100]之间的数值
SELECT ROUND(RAND() *100);   #四舍五入 ,获取[0,100]之间的数值, 可以出现: 0和100

SELECT (‘a‘+‘b‘);

原文地址:https://www.cnblogs.com/zhazhaacmer/p/9901015.html

时间: 2024-08-05 01:18:08

[终章]进阶20-流程控制结构--if/case/while结构 - 三个while的存储过程案例(批量生成表单数据) - 随机长度的随机字符串的存储过程案例的相关文章

其他(四) -- 流程控制结构

流程控制结构 说明: 顺序结构:程序从上往下依次执行 分支结构:程序按条件进行选择执行,从两条或多条路径中选择一条执行 循环结构:程序满足一定条件下,重复执行一组语句 分支结构 特点: 1.if 函数功能:实现简单双分支语法:IF(条件, 值1, 值2)位置可以作为表达式放在任何位置2.case 结构功能:实现多分语法1:CASE 表达式或字段WHEN 值1 THEN 语句1;WHEN 值2 THEN 语句2;...ELSE 语句n;END [CASE]; 位置: 可以放在任何位置, 如果放在

十一、流程控制结构

目录 介绍 分支结构 一.if函数 二.case函数 三.if结构 循环结构 分类 循环控制 语法 语法 语法 案例 循环结构总结 小练习 介绍 顺序结构:程序从上至下依次执行 分支结构:程序从两条或多条路径中选择一条去执行 循环结构:程序在满足一定条件的基础上,重复执行一段代码 分支结构 一.if函数 功能: 实现简单的双分支 语法: select if(表达式1, 表达式2, 表达式3); 执行顺序: 如果表达式1成立,返回表达式2的值,否则返回表达式3的值 应用场景: 任何地方 二.cas

BugPhobia终章篇章:学霸在线系统Beta阶段展示

0x00 :序言 1 universe, 9 planets, 204 countries,809 islands, 7 seas, and i had the privilege to meet you. 展信安,致以BugPhobia团队的终章 即便对庆典失去兴趣和新鲜感 也选择用仪式感填补生活 就像用纸记下“一二三四”的计划 贴在学校衣柜的铁皮上 0x01 :团队成员简介 图1 BugPhobia团队终章篇章的合影 0x02 :团队项目愿景 0x0200: 学霸在线系统基本定位 网站基本定

OO终章

OO终章 OO完结,这个课程比我想象得要肝,看来暑假得养老了. 感谢各位老师,各位助教带来的全新窝窝,游戏体验良好. 不过,也有遗憾,所以谁能告诉我BUG修复界面长啥样?? OO无伤过 感谢wsb,lsj,shh,xcb,hdl,zyy,lyt,xsy,wjyi,zt几位巨佬的帮助. 10198 lines,0 bugs. 第四单元总结 Project13 类图 大体上是把每个类挂在到类图下,把类的方法.属性挂在到类下,接口的属性和方法因为不涉及查询,故直接忽略. 复杂度 Method ev(G

《吊打面试官》系列-Redis终章_凛冬将至、FPX_新王登基

前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难.作为一个在互联网公司面一次拿一次offer的面霸(请允许我使用一下夸张的修辞手法),打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚,在一个寂寞难耐的夜晚,我痛定思痛,决定开始写<吊打面试官>系列,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚瞠目结舌,疯狂收割大厂offer! 絮叨 男儿

4.6日第10次作业,,18章风险,19章收尾,20章知识产权,高项,29-田哲琦

4.6日第10次作业,,18章风险,19章收尾,20章知识产权,高项,29-田哲琦 第18章.风险管理 1.风险管理包括哪六个过程?(记)P456 答:1).风险管理规划: 2).风险识别: 3).定性风险分析: 4).定量风险分析: 5).应对计划编制: 6).风险监控: 2.什么是应急计划?请举例.P459 答:应急计划:是指当一项可能的风险事件实际发生时项目团队将采取的预先确定的措施: 例如:当项目经理根据一个新的软件产品开发的实际进展情况,预计到该软件开发成果奖不能及时集成到正在按合同进

Thinking In Java笔记(第四章 控制执行流程)

第四章 控制执行流程 Java中使用了C的所有流程控制语句.在Java中涉及的关键字包括if-else,while,do-while,for,return,break,continue以及选择语句switch.然而Java不支持goto语句(该语句引起了许多的反对意见),但是Java仍然可以类似goto那样跳转. 4.1 True和False 所有的条件语句都利用条件表达式的真假来决定执行的路径.Java中不允许我们将一个数字作为boolean值使用,虽然C和C++中是允许的("非零"

C语言流程控制结构—顺序结构、选择结构

C语言3种流程控制结构:顺序结构.选择结构.循环结构. 顺序结构 最简单的结构,不需要关键字.安照代码顺序一步步执行. 选择结构 (一)if简单使用 1) 第一种结构:if a) 如果条件为真,就执行后面的语句,否则不执行. if(条件) { 语句1: 语句2: } 2) 第二种结构:if - else a) 如果条件成立就执行语句1,否则执行语句2. if(条件) { 语句1: } else { 语句2: } 3) 第三种结构:if - else if - else... a) 先判断条件1,

流程控制结构

一.流程控制结构 1.顺序结构:按书写顺序执行每一条语句. 2.选择结构:对给定的条件进行判断,根据判断结果决定执行哪一段代码. 3.循环结构:在给定条件成立的情况下,反复执行某一段代码. 二.选择结构-if if简单使用 (1) 第一种结构: a) 如果条件为真,就执行后面的语句,否则不执行. if(条件) { 语句1: 语句2: ···· } (2) 第二种结构: a) 如果条件成立就执行语句1,否则执行语句2. if(条件) { 语句1: } else { 语句2: } (3) 第三种结构