存储过程是预编译好的sql语言的集合 减少编译次数,提高sql语句的重用性。但是在现阶段因为其维护困难及其他一系列的原因,有些时候并不推荐使用

创建

  1. create procedure 存储过程的名字 ( in | out | inout 参数名 参数类型 )
  2. begin
  3. select 字段名 into 输出类型的参数名 from ... 合法的sql语句;
  4. end;

其中 in out inout 表示参数的类型,in为入参,表示调用此存储过程时传进来的参数,out为出参,用于将查询结果保存在out参数上边,调用存储过程之后即可使用; inout具有in 和 out 两个的特点。有一点需要注意的是out参数只能保留单个的结果,如果一条查询语句出来多个结果,则会报错。

调用

  1. call 存储过程名字 ( 参数列表 )
  2. # 一般都是使用 set @自定义名字 = 值 来定义变量

删除

  1. # 一次只能删除一个
  2. drop procedure 存储过程名字

查看

  1. show create procedure 存储过程名字

通常存储过程很少涉及到修改,如果修改存储过程,则先删除然后再创建之。


分支语句

IF 函数

  1. if(exp,exp1,exp2)

简单的双分支函数,类似于三元运算符,可在select或其他地方调用,执行顺序为,exp为真,exp1执行,否则exp2执行。

case

  1. # 第一种 一般用于等值判断 可搭配在select语句中
  2. case exp
  3. when 值1 then 返回的值或执行的语句
  4. ...
  5. else 返回的值
  6. end [case]; # 作为语句时才有case
  7. # 第二种 一般用于区间判断
  8. case
  9. when 表达式 then 返回值或执行的语句
  10. ...
  11. else 返回值或执行的语句
  12. end [case];# 作为语句时才有case

上述两种case若作为表达式可在其他语句中使用,若作为单独的语句则只能在存储过程体函数体中使用,并且要在end后加上case 切每个分支要加上分号,当然前提是使用delimiter重新设置分隔符之后再加分好。
如果when中条件为真,则执行对应的then后边的语句并结束case;若都不满足则执行else中的语句;else可以省略,若省略else 切when中无匹配最终返回null。

示例:

根据传入的成绩显示等级,90-100 -> ‘A’,80-90 -> ‘B’,60-80 -> ‘C’,否则显示’D’

  1. delimiter $
  2. create procedure p1( in score int )
  3. begin
  4. case
  5. when score >= 90 and score <= 100 then select 'A';
  6. when score >= 80 and score <= 90 then select 'B';
  7. when score >= 60 and score <= 80 then select 'C';
  8. else select 'D';
  9. end case;
  10. end $

if 结构

可以实现多重分支,接近一般编程语言的语法

  1. if 条件 then 语句;
  2. elseif 条件 then 语句;
  3. ...
  4. [else 语句]
  5. end if;

只能用于函数体存储过程体中。
上边的例子用if分支结构可重写为:

  1. delimiter $
  2. create procedure p1( in score int )
  3. begin
  4. if score >= 90 and score <= 100 then select 'A';
  5. elseif score >= 80 and score <= 90 then select 'B';
  6. elseif score >= 60 and score <= 80 then select 'C';
  7. else select 'D';
  8. end if;
  9. end $

mysql - 存储过程及分支语句的更多相关文章

  1. MySQL存储过程动态SQL语句的生成

    用Mysql存储过程来完成动态SQL语句,使用存储过程有很好的执行效率: 现在有要求如下:根据输入的年份.国家.节假日类型查询一个节假日,我们可以使用一般的SQL语句嵌入到Java代码中,但是执行效率 ...

  2. MySQL 存储过程常用SQL语句收集

    1,select curdate() /*2016-10-08*/ 2,select date_sub(curdate(), INTERVAL 6 DAY) /*2016-10-02*/ 3,case ...

  3. MySQL存储过程 CASE语句

    MySQL存储过程  CASE语句 除了IF语句,MySQL提供了一个替代的条件语句CASE. MySQL CASE语句使代码更加可读和高效. CASE语句有两种形式:简单的搜索CASE语句. 简单C ...

  4. MySQL 存储过程 if语句

    MySQL  存储过程 if语句 MySQL IF语句允许您根据表达式的某个条件或值结果来执行一组SQL语句. 要在MySQL中形成一个表达式,可以结合文字,变量,运算符,甚至函数来组合.表达式可以返 ...

  5. mysql 存储过程:提供查询语句并返回查询执行影响的行数

    mysql 存储过程:提供查询语句并返回查询执行影响的行数DELIMITER $$ DROP PROCEDURE IF EXISTS `p_get_select_row_number`$$ CREAT ...

  6. SQL基本编程,分支语句,循环语句,存储过程,触发器

    基本编程: 定义变量 declare @变量名 数据类型 赋值 set @变量名 = 值 select @变量名 = 值 取值打印 select @变量名 print @变量名 映射到结果集 打印到消 ...

  7. MySQL存储过程中使用SELECT …INTO语句为变量赋值

    使用SELECT …INTO语句为变量赋值 在MySQL存储过程中,可以使用SELECT …INTO语句对变量进行赋值,该语句在数据库中进行查询,并将得到的结果赋值给变量.SELECT …INTO语句 ...

  8. 记mysql条件分支语句CASE WHEN THEN ELSE END的使用

    记一次基于mysql数据库查询时条件分支语句使用 表达式格式:CASE column WHEN 条件1 THEN 表达式1 WHEN 条件2 THEN 表达式2 .... ELSE 表达式 END [ ...

  9. mysql存储过程语法及实例

    存储过程如同一门程序设计语言,同样包含了数据类型.流程控制.输入和输出和它自己的函数库. --------------------基本语法-------------------- 一.创建存储过程cr ...

  10. 12.Mysql存储过程和函数

    12.存储过程和函数12.1 什么是存储过程和函数存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程和函数简化应用开发人员的工作,减少数据在数据库和应用服务器之间的传输, ...

随机推荐

  1. Spring Cloud Sleuth in a Monolith Application

    1. Overview   In this article, we're introducing Spring Cloud Sleuth – a powerful tool for enhancing ...

  2. Qt通用方法及类库11

    函数名 //判断IP地址及端口是否在线 static bool ipLive(const QString &ip, int port, int timeout = 1000); //获取网页所 ...

  3. Qt开源作品20-PNG图片警告去除工具

    一.前言 在新版的Qt5中,我们之前在Qt4中使用的png图片,到了这里经常会报一个警告,libpng warning: iCCP: known incorrect sRGB profile,尽管这种 ...

  4. 综述😋Security and Privacy Challenges of ✌Large Language Models A Survey

  5. RL中on-policy和off-policy的本质区别/重要性采样

    本随笔的图片都来自UCL强化学习课程lec5 Model-free prediction的ppt (Teaching - David Silver ). 回忆值函数的表达式: \[v_\pi(s) = ...

  6. Ubuntu Jack-server报错解决方案

    报错关键部分如下: Communication error with Jack server (35), try 'jack-diagnose' or see Jack server log 究其原因 ...

  7. 解读ENS网络连接,面向多云多池网络的高效互联

    本文分享自华为云社区<ENS网络连接,面向多云多池网络的高效互联>,作者:华为云Stack ENS研发团队. 1.ENS网络连接服务场景详细介绍 ENS网络连接通过统一建模和全局管控实现跨 ...

  8. c# Polygon 画多边形,

    //随机多边形:using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  9. docker中创建容器时文件挂载和端口映射命令与首次登录官方mysql的参数

    docker run -itd --name nginx-08 -v /local_data2:/data/nginx/html -p 12000:80  nginx:1.18.0 docker ru ...

  10. Git的一些基本用法

    本文分享自天翼云开发者社区<Git的一些基本用法>,作者:l****n 基本操作 git branch 查看当前分支 git branch -a 查看所有分支 git pull 更新当前分 ...