第63讲:MySQL存储过程变量传参的核心概念与案例

文章目录

    • 1.存储过程传参
    • 2.存储过程传参的语法结构
    • 3.存储过程传参经典案例
      • 3.1.IN类型的传参
      • 3.2.IN和OUT同时使用的传参
      • 3.3.INOUT类型的传参

1.存储过程传参

在创建存储过程时,存储过程名称后面的括号里是可以传入一些参数的,例如传入一个变量,这个变量可以在存储过程中进行条件判断、引用变量值等等,只需要在调用存储过程时为这个变量赋值即可。

image-20220614204222319

传参就是实际意义上的传递参数,和其他开发语言一样,传参就是讲一个值通过位置变量的方式传递到一组代码中,这组代码就可以引用该变量进行一系列的操作。

在存储过程中使用传参时,通常分为以下三种类型:

  • IN类型:
    • IN类型的参数是作为输入参数的,意思是将某个值、某个变量传递到存储过程中使用,类似于shell脚本的位置参数$1,在执行脚本时指定$1的内容,就可以将该内容传入到脚本中,一个道理。
  • OUT类型:
    • OUT类型的参数是作为输出参数的,使用OUT类型的参数通常时存储过程中声明的一个变量,通过各种逻辑在存储过程内部就为变量赋好了值,最后将这个结构返回到终端。
    • OUT类型典型的应用就是将存储过程内经过逻辑运算后为变量赋值的结果,直接返回给用户,无需再手动select变量。
  • INOUT类型:
    • INOUT类型的参数既可以作为输入参数,又可以作为输出参数,当我们希望传入的参数经过存储过程的逻辑运算后,再将传入的参数输出时,可以采用此类型。

存储过程的传参一般都是传的一个自定义变量或者局部变量。

2.存储过程传参的语法结构

CREATE PROCEDURE 存储过程名称 ([IN/OUT/INOUT 参数名称 参数类型])
BEGIN SQL语句
END

3.存储过程传参经典案例

3.1.IN类型的传参

创建一个proc_3的存储过程,传入username变量到存储过程,在存储过程中声明一个user_zsxm的局部变量,然后将传入的username变量值赋给user_zsxm变量,最后打印user_zsxm变量的值。

1) 编写存储过程

create procedure proc_3(in username varchar(10))			#传入username这个变量到存储过程并设置varchar类型
begindeclare user_zsxm varchar(10);						#声明user_zsxm局部变量set user_zsxm := username;						    #将传入的username变量值赋给user_zsxm变量select user_zsxm;								   #打印user_zsxm变量的值
end;

2)调用存储过程

在创建存储过程时,()里面可以传入很多个变量参数,多个参数之间以逗号分隔,在调用存储过程时,直接填写变量对应的值即可,如果有多个值,也是以逗号进行分隔,按照从左往右的顺序,依次赋传参给每一个变量。

call proc_3('jiangxl');

调用proc_3存储过程,然后为第一个参数username变量赋值jiangxl,通过存储过程的运算,jiangxl这个值会赋给user_zsxm变量,最后又会打印user_zsxm这个变量,输出结果还是jiangxl。

image-20220614211517253

调用存储过程时,可以直接写具体的值,也可以将另外一个变量的值赋给传参时的变量。

image-20220614211656407

3.2.IN和OUT同时使用的传参

OUT类型的传参通常会配合IF流程控制来使用,IF流程控制在后面会讲,这里先使用IN做出类似的效果。

使用IN类型传入username的变量内容,然后在存储过程中为zw变量赋予值,最后使用OUT类型的参数返回zw变量的值。

1)创建存储过程

create procedure proc_4(in username varchar(10),out zhiwu varchar(10))	#传入username变量的值,输出存储过程zhiwu变量的值
begindeclare user_zsxm varchar(10);						#声明user_zsxm局部变量set user_zsxm := username;								#将传入的username变量值赋给user_zsxm变量			set zhiwu := '网络工程师';								#为out参数的zhiwu变量赋值
end;

2)调用存储过程

在调用存储过程时,我们需要为每一个传入的参数声明变量值。

本次的案例是通过out类型将存储过程中的变量返回出来,注意out类型是将存储过程内的变量值返回出来,我们想要拿到out类型返回出来的变量值,就需要通过一个用户自定义的变量去接收这个值,否则就不知道这个值输出到了哪里。

首先使用call调用存储过程,传入第一个参数username变量的值,然后定义一个zhiwu自定义变量,通过zhiwu这个自定义变量去接收第二个参数返回的变量值,最后查询我们自定义的zhiwu变量,就可以看到存储过程第二个参数返回的值。

call proc_4('jiangxl',@zhiwu);
select @zhiwu;

image-20220614215329638

3.3.INOUT类型的传参

INOUT参数可以将传入的参数输入到存储过程中进行运算,最后将运算后的新结果返回到终端。

通过inout类型传入一个数字90,在存储过程中将90这个值进行运算,然后将新结果返回出来。

1)创建存储过程

创建存储过程,传入inout类型的参数,类型为double,将传入的变量值乘以0.5,然后将结果再返回给用户。

create procedure proc_5(inout sz_ysh double)
beginset sz_ysh := sz_ysh * 0.5;
end

2)调用存储过程

由于inout类型即可以传参输入,又可以传参输出,在调用存储过程,输入传参的内容时,无法直接填写变量值,因为输出传参不会识别变量值只会识别变量名,所以需要先将inout的变量通过自定义变量赋值,再调用存储过程时传入自定义的变量,最后再查询变量的新值。

注意自定义的变量名要与inout中的变量名保持一致。

set @sz_ysh := 100
call proc_5(@sz_ysh)
select @sz_ysh

image-20220614222237259

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

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

相关文章

OpenCV+QT实现的数字图像处理算法合集

源码下载地址: 基于OpenCV和QT的图像处理源码 图像预处理 灰度处理 灰度直方图 灰度均衡 梯度锐化 Laplace锐化 边缘检测 Roberts Sobel Laplace Prewitt canny Krisch 噪声 椒盐噪声 高斯噪声 滤波 均值滤波 中值滤波 双边滤波 形态学滤波 高斯滤波 图像变…

CMMI V2.0能力域

1、概念 能力域是一组相关的PA,可以提高组织或项目的技能和活动的性能。能力域视图是CMMI模型的一个子集,描述了构成特定能力域的一组预定义PA。能力域是一种视图。如下面规划和管理工作能力域视图: 2、类别 类别是相关能力域的逻辑组或视图…

UnitTest框架的使用

文章目录 一、UnitTest框架是什么?二、UnitTest核心要素三、TestCase四、TestSuite & TestRunner 一、UnitTest框架是什么? UnitTest框架是python自带的一个单元测试框架,主要用它来做单元测试,它有以下特点: 能…

UE4 UltraDynamicSky 天气与水体交互

最上面的Lerp的A通道为之前的水面效果,B是做的冰面效果 用Dynamic_Landscape_Weather_Effects的BaseColor的R通道四舍五入作为Lerp的Alpha值 使用一张贴图,乘以RadialGradientExponential对材质边缘做弱化,RadialGradientExponential的Raid…

SpringBoot项目访问后端页面404

检查项目的路径和mapper映射路径没问题后,发现本级pom文件没有加入web启动模块的pom文件中 maven做项目控制时,要注意将maven模块加入到web启动模块中

YOLOv8改进实战 | 更换主干网络Backbone(四)之轻量化模型MobileNetV3

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

Linux tmux使用总结

文章目录 1 tmux介绍2 tmux概念会话Sessions、窗口Windows、面板Panesstatus line中字段含义 3 Sessions会话管理新建会话断开当前会话进入之前的会话关闭会话查看所有的会话 4 tmux快捷指令系统指令窗口(Windows)指令面板(Panes)…

【C++进阶(九)】C++多态深度剖析

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C   🔝🔝 多态 1. 前言2. 多态的概念以及定义3. 多态的实…

java 企业工程管理系统软件源码 自主研发 工程行业适用

工程项目管理软件(工程项目管理系统)对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营,全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&am…

英语——分享篇——每日200词——3001-3200

3001——ascertain——[ˌsəteɪn]——vt.查明,弄清——ascertain——a苹果(编码)s美女(编码)certain确定(熟词)——吃苹果的美女确定已查明此事——It can be difficult to ascertain the facts. ——可能难以查明事实真相。 3002——disrupt——[dɪsrʌpt]——…

spring6-国际化:i18n | 数据校验:Validation

文章目录 1、国际化:i18n1.1、i18n概述1.2、Java国际化1.3、Spring6国际化1.3.1、MessageSource接口1.3.2、使用Spring6国际化 2、数据校验:Validation2.1、Spring Validation概述2.2、实验一:通过Validator接口实现2.3、实验二:B…

Python 安装CSF(布料模拟滤波)的环境配置

一、环境配置 1.1 下载源码: Github下载CSF库源码 1.2 解压文件如下: 二、安装CSF库 2.1在解压文件中找到python文件夹所在目录 2.2 输入cmd并回车,来打开终端窗口 2.3激活虚拟环境 通过: activate +你的虚拟环境名称。来激活安装CSF库的虚拟环境。【不执行此

VM16Pro的Win10虚拟机安装Linux子系统Kali

VM16Pro的Win10虚拟机安装Linux子系统Kali 一、启用Windows功能二、配置WSL三、安装Kali四、安装kali基本工具包五、图形化六、适用的报错七、其他问题参考 一、启用Windows功能 启用后需重启二、配置WSL wsl --update #管理员启动Powershell执行,完成后将下面…

GitLab-访问返回403 forbidden问题处理

访问gitlab时报错forbidden 一般访问量大,密码错误频率高的时候,gitlab防爆机制启动了,对IP做了封禁,导致某些IP访问的是否返回 403 forbidden 1. 查看被封的IP /opt/gitlab/embedded/bin/redis-cli -s /var/opt/gitlab/redis/red…

vant组件是使用?

首先 在vue项目中使用的时候 要先下载组件 使用npm安装 # Vue 3 项目,安装最新版 Vant npm i vant# Vue 2 项目,安装 Vant 2 npm i vantlatest-v2 使用yarn安装或pnpm # 通过 yarn 安装 yarn add vant# 通过 pnpm 安装 pnpm add vant 在框架中引入即…

数据要素安全流通:挑战与解决方案

文章目录 数据要素安全流通:挑战与解决方案一、引言二、数据要素安全流通的挑战数据泄露风险数据隐私保护数据跨境流动监管 三、解决方案加强数据安全防护措施实施数据隐私保护技术建立合规的数据跨境流动机制 四、数据安全流通的未来趋势01 数据价值与产业崛起02 多…

2023-mac brew安装python最新版本,遇见的问题和处理方式

#### 创建Python3.11.6符号链接我现在遇见这个问题了:python --version -bash: python: command not found 192:bin wangyang$ python3 --version Python 3.9.6 192:bin wangyang$ /usr/local/bin/python3 --version Python 3.11.6我要怎么做,我才可以直…

Spring Boot自动配置原理揭秘

自动配置原理 概述原理Spring Boot Starterspring.factories 文件ConditionalOnX 注解配置 Bean配置属性 源码剖析 主页传送门:📀 传送 概述 Spring Boot 是一个用于创建独立的、生产级别的 Spring 应用程序的框架。它极大地简化了 Spring 应用程序的开…

Spring MVC(一)【什么是Spring MVC】

重点 Spring:IOC 和 AOP 。 Spring MVC :Spring MVC 的执行流程。 SSM 框架的整合! Spring 和 Mybatis 我们不建议使用太多注解,Spring MVC 建议全部使用注解开发! 1、MVC 回顾 1.1、什么是MVC MVC是模型(Model)…

java实现多线程下载器

前言: 👏作者简介:我是笑霸final,一名热爱技术的在校学生。 📝个人主页:个人主页1 || 笑霸final的主页2 📕系列专栏:项目专栏 📧如果文章知识点有错误的地方,…