mysql存储过程的流程控制

news2024/12/25 14:19:26

本文来说下mysql存储过程的流程控制语句

文章目录

  • 流程控制概述
  • IF语句
  • CASE语句
  • LOOP语句
  • LEAVE语句
  • ITERATE语句
  • REPEAT语句
  • WHILE语句
  • 本文小结


流程控制概述

存储过程中可以使用流程控制来控制语句的执行。

MySQL中可以使用IF语句、CASE语句、LOOP语句、LEAVE语句、ITERATE语句、REPEAT语句和WHILE语句来进行流程控制。每个流程中可能包含一个单独语句,或者是使用BEGIN…END构造的复合语句,构造可以被嵌套。

在这里插入图片描述


IF语句

IF语句用来进行条件判断。根据是否满足条件,将执行不同的语句。其语法的基本形式如下:

IF search_condition THEN statement_list  
[ELSEIF search_condition THEN statement_list] ...  
[ELSE statement_list]  END IF

其中,search_condition参数表示条件判断语句;statement_list表示不同条件的执行语句。

使用实例

CREATE DEFINER=`tmis`@`%` PROCEDURE `proc`(IN var int)
begin
-- 判断输入的值与0的大小关系
   if var > 0
	     then select 'var大于0';
		 elseif var < 0
			 then select 'var小于0';
     else select 'var等于0';
   end if;
end

程序结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


CASE语句

CASE语句也用来进行条件判断,其可以实现比IF语句更复杂的条件判断。CASE语句的基本形式如下:

CASE case_value 
WHEN when_value THEN statement_list 
[WHEN when_value THEN statement_list] ... 
[ELSE statement_list] 
END CASE

其中,case_value参数表示条件判断的变量;when_value参数表示变量的取值;

statement_list参数表示不同when_value值的执行语句。

CASE语句还有另一种形式。该形式的语法如下:

CASE 
WHEN search_condition THEN statement_list 
[WHEN search_condition THEN statement_list] ... 
[ELSE statement_list] 
END CASE

其中,search_condition参数表示条件判断语句;statement_list参数表示不同条件的执行语句。下面是一个CASE语句的示例。代码如下:

CREATE DEFINER=`tmis`@`%` PROCEDURE `proc2`(IN var int)
begin
    /*第一种格式*/
   case var
	   when 1 then select 'var is 1';
     when 2 then select 'var is 2';
     else select 'var is not 1 or 2';
end case;
end

在这里插入图片描述


LOOP语句

LOOP语句可以使某些特定的语句重复执行,实现一个简单循环。但是LOOP语句本身没有停止循环的语句,必须是遇到LEAVE语句等才能停止循环。 LOOP语句的语法的基本形式如下:

[begin_label:] LOOP  statement_list  END LOOP [end_label]

begin_label参数和end_label参数分别表示循环开始和结束的标志,这两个标志必须相同,而且都可以省略;statement_list参数表示需要循环执行的语句。

下面是一个LOOP语句的示例。代码如下:

CREATE DEFINER=`tmis`@`%` PROCEDURE `proc3`()
begin
   declare id int default 5;
   add_loop:loop
     set id=id+1;
	   if id>=10 then 
		   select 'result:'+id;
		   leave add_loop;
	   end if;
   end loop add_loop;
end

在这里插入图片描述


LEAVE语句

LEAVE语句主要用于跳出循环控制。其语法形式如下:LEAVE label ;其中,label参数表示循环的标志.下面是一个LEAVE语句的示例。代码如下:

CREATE DEFINER=`tmis`@`%` PROCEDURE `proc3`()
begin
   declare id int default 5;
   add_loop:loop
     set id=id+1;
	   if id>=10 then 
		   select 'result:'+id;
		   leave add_loop;
	   end if;
   end loop add_loop;
end

ITERATE语句

ITERATE语句也是用来跳出循环的语句。但是,ITERATE语句是跳出本次循环,然后直接进入下一次循环。ITERATE语句只可以出现在LOOP、REPEAT、WHILE语句内。

ITERATE label

ITERATE语句的基本语法形式如下:ITERATE label ;下面是一个ITERATE语句的示例。代码如下:

CREATE DEFINER=`tmis`@`%` PROCEDURE `proc4`(p1 INT)
begin
    label1: LOOP
      SET p1 = p1 + 1;
      IF p1 < 10 
			  THEN ITERATE label1; 
			END IF;
      LEAVE label1;
    END LOOP label1;

    SET @x = p1;
		select @x;
end

说明:LEAVE语句和ITERATE语句都用来跳出循环语句,但两者的功能是不一样的。LEAVE语句是跳出整个循环,然后执行循环后面的程序。而ITERATE语句是跳出本次循环,然后进入下一次循环。


REPEAT语句

REPEAT语句是有条件控制的循环语句。当满足特定条件时,就会跳出循环语句。REPEAT语句的基本语法形式如下:

[begin_label:] REPEAT 
statement_list 
UNTIL search_condition 
END REPEAT [end_label] 

其中,statement_list参数表示循环的执行语句;search_condition参数表示结束循环的条件,满足该条件时循环结束。下面是一个REPEAT语句的示例。代码如下:

CREATE DEFINER=`tmis`@`%` PROCEDURE `proc5`()
begin
   declare id int default 0;
   repeat
     set id=id+1;
     until id>=10 
   end repeat;
	 select id;
end

WHILE语句

WHILE语句也是有条件控制的循环语句。但WHILE语句和REPEAT语句是不一样的。WHILE语句是当满足条件时,执行循环内的语句。WHILE语句的基本语法形式如下:

[begin_label:] WHILE search_condition DO 
statement_list 
END WHILE [end_label]

其中,search_condition参数表示循环执行的条件,满足该条件时循环执行;statement_list参数表示循环的执行语句。下面是一个WHILE语句的示例,代码如下:

CREATE DEFINER=`tmis`@`%` PROCEDURE `proc6`()
begin
   declare id int default 0;
   while id < 10 do
     set id=id+1;
   end while;
	 select id;
end

本文小结

本文比较详细的介绍了mysql中存储过程的流程控制语句。

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

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

相关文章

Cesium设置模型朝向速度矢量方向

Cesium设置模型朝向速度矢量方向 文章目录Cesium设置模型朝向速度矢量方向1. 需求场景2. 技术路线2.1 VelocityOrientationProperty2.2 VelocityVectorProperty3. 参考链接1. 需求场景 现有一段飞机起飞、爬升的轨迹数据&#xff0c;需要在Cesium中模拟出飞行过程动画&#xf…

Lesson 3. 线性回归的手动实现(3.3 线性回归手动实现与模型局限 3.4 机器学习模型结果可信度理论与交叉验证基础)

文章目录一、线性回归手动实现与模型局限1. 线性回归的手动实现2. 线性回归模型局限3. 线性回归的决定系数二、机器学习模型结果可信度理论与交叉验证基础1. 机器学习模型结果可信度理论基础与数据集划分1.1 机器学习模型结果可信度基础理论1.2 数据集切分方法1.3 线性回归手动…

图的关键路径(AOE网络)

文章目录AOE网概念性质研究的问题关键路径概念求解的方法注意事项AOE网 概念 用顶点表示事件, 边弧表示活动, 边弧上的权值表示活动持续的时间, 这样的带权有向无环图叫AOE网. AOE网常用于估算工程完成时间. AOE网和AOV网都是有向无环图, 不同之处在于它们的边和顶点所代表的…

【青训营】Go的高质量编程

Go的高质量编程 本文内容总结自字节跳动青年训练营 第五届 后端组 什么是高质量&#xff1f; 各种边界条件是否完备异常情况能正常处理&#xff0c;稳定性有保障易读易维护 Go语言开发者Dave Cheney指出&#xff0c;编程需要遵循以下原则&#xff1a; 简单性 消除多余的复…

Docker安装和卸载教程

1、安装前先卸载系统上原有的Docker sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine2、安装需要的yum-utils包 需要安装 yum-utils包&#xff08;该包提供了 yum-c…

研一寒假C++复习笔记--程序的内存模型

目录 1--内存分区模型 2--代码区 3--全局区 4--栈区 5--堆区 6--new操作符 1--内存分区模型 执行C程序时&#xff0c;内存可划分为4个区域&#xff0c;不同区域存放的数据&#xff0c;具有不同的生命周期&#xff1b; ① 代码区&#xff1a;存放函数的二进制代码&#x…

nvcc 编译并行程序时报错gcc: error trying to exec ‘cc1plus‘: execvp: 没有那个文件或目录

一、nvcc 编译程序时报错 gcc: error trying to exec cc1plus: execvp: 没有那个文件或目录 cc1plus 是gcc编译工具链中用到的一个程序 报错非常直白&#xff0c;就是说gcc在执行时找不到这个程序 二、问题解决方法 1.确定是否正确安装gcc、g 如果系统中没有正确安装gcc…

elementUI组件下拉框属性的一些配合使用

文章目录1、单选带搜索功能&#xff08;自定义搜索&#xff09;2、下拉多选远程搜索3、下拉多选有默认选项4、下拉多选默认禁用只提供大致思路&#xff0c;大量玩法等你开发【doge】 1、单选带搜索功能&#xff08;自定义搜索&#xff09; 例如&#xff0c;我需要实现一个功能…

关于学习的一些建议

本文的主要讲的内容如图&#x1f447; 文末附有整个Java的学习路线、能力提升和学习建议的思维导图。 快过新年了&#xff01;在过去的一年里&#xff0c;你们收获了什么呢&#xff1f;在未来的一年里&#xff0c;你们有什么新目标吗&#xff1f; 1.定目标 过去的我往往喜欢…

初识 Django

初识 Django参考描述优劣 Django&#xff08;部分&#xff09;优势功能完备&#xff0c;开箱即用开发效率高Admin 管理后台安全ORM可扩展劣势性能模板过渡封装获取长期支持版&#xff08;Long Time Support&#xff0c;LTS&#xff09;PIP官网获取检测MVC 与 MVTMVC 架构MTV 架…

力扣sql基础篇(十一)

力扣sql基础篇(十一) 1 每件商品的最新订单 1.1 题目内容 1.1.1 基本题目信息1 1.1.2 基本题目信息2 1.1.3 示例输入输出 a 示例输入 b 示例输出 1.2 示例sql语句 SELECT p.product_name,o1.product_id,o1.order_id,o1.order_date FROM Orders o1 INNER JOIN ( SELECT pro…

Android自定义绘制1-1 Plus

上一个文章是看着扔物线的视频写的。写玩之后&#xff0c;发现他的文章还有很多内容。尴尬。 接着写呗。 自定义绘制知识的4个级别 1.Canvas的drawXXX()系列方法以及Paint类的一些常见方法。 canvas的drawXXX()是自定义绘制的最基本操作。掌握了这些方法&#xff0c;才知道…

JNPF 3.4.5 java+.Net6 旗舰版企业版 简搭-敏捷业务低代码开发平台

JNPF 低代码通常是指APaaS产品&#xff0c;通过为开发者提供可视化的应用开发环境&#xff0c;降低或去除应用开发对原生代码编写的需求量&#xff0c;进而实现便捷构建应用程序的一种解决方案。广义上低代码概念涵盖所有能够完成代码的集成&#xff0c;减少代码开发的应用过程…

在哔站黑马程序员学习Spring—Spring Framework—(二)spring的注解开发学习笔记

一、注解开发spring的强项—>简化开发spring从2.0开始逐步提供了各种各样的注解&#xff0c;到了2.5注解比较完善&#xff0c;到了3.0推出了纯注解开发,使用java类替代配置文件&#xff0c;开启了spring快速开发通道。二、注解开发定义bean不再需要在spring配置文件中定义be…

拷贝实体的工具类---BeanObjectCopyUtils

目录 前言&#xff1a; 第一步&#xff1a;引用的核心类&#xff1a; 第一种&#xff1a;单个实体的拷贝方法 第二种&#xff1a;列表类的实体拷贝方法 第二步&#xff1a;核心方法的介绍&#xff1a; 核心方法一&#xff0c;介绍了实例化的操作&#xff1a; 核心方法二…

CMMI之项目管理类

项目管理类过程域涵盖了与项目的计划、监督和控制相关的项目管理活动。CMMI-DEV 中的七个项目管理类过程域是&#xff1a;• 集成项目管理&#xff08;Integrated Project Management&#xff0c; IPM&#xff09;• 项目监督与控制&#xff08;Project Monitoring and Control…

蓝桥杯:城邦

题目链接 问题描述 答案提交 本题答案是&#xff1a;4046。 运行限制 思路分析 代码&#xff08;Java&#xff09; 问题描述 小蓝国是一个水上王国, 有 2021 个城邦, 依次编号 1 到 2021。在任意两 个城邦之间, 都有一座桥直接连接。 为了庆祝小蓝国的传统节日, 小蓝国政府…

登录授权方案:JSON Web Tokens (JWT)

登录授权方案&#xff1a;JSON Web Tokens (JWT) JWT官方文档&#xff1a;https://jwt.io/introduction 1.简介&#xff1a; JWT 即 json web tokens&#xff0c;通过JSON形式作为Web应用中的令牌&#xff0c;用于在各方之间安全地将信息作为JSON对象传输&#xff0c;在数据传…

【博客598】从netfilter hook执行原理分析iptables为什么自定义链无法主动调用只能从其它链跳转过来

从netfilter hook执行原理分析iptables为什么自定义链无法主动调用只能从其它链跳转过来 1、netfilter hook执行原理 netfilter 框架是 Linux 网络子系统里的一个核心模块&#xff0c;iptables 就是基于 netfilter 框架实现的一个网络包处理工具。 netfilter hook被调用后执行…

2023年“科学探索奖”申报启动及指南

2023年“科学探索奖”资助不超过50位青年科学家&#xff0c;每位获奖人5年内将获得总计300万元奖金。今年的申报时间为2023年1月1日至3月15日。获奖名单拟定于2023年8月揭晓。本文知识人网小编整理该奖项的概要及申报指南&#xff0c;以飨读者。“科学探索奖”是一项由科学家主…