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

news2024/11/24 20:11:41

文章目录

    • 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类型
begin
	declare 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变量的值
begin
	declare 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)
begin
	set 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.coloradmin.cn/o/1123383.html

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

相关文章

毕业三年,月薪30K,我想跟你聊聊

大家好,我是冰河~~ 很多读者私信问我,自己工作三年多了,随着工作年限的不断增长,感觉自己的技术水平与自己的工作年限严重不符。想跳槽出去换个新环境吧,又感觉自己的能力达不到心仪公司的标准,即使投了简…

蔚蓝科技推BabyAlpha阿尔法机器狗,表象之下是否会重蹈虚假覆辙

最近笔者在朋友圈又刷到这样一条广告:关于一个叫蔚蓝阿尔法机器狗的推广。颇有刷着刷着刷出一条机器狗来的既视感。 经过了解,这是蔚蓝科技公司为旗下新机器狗BabyAlpha推出,投放的朋友圈销售广告。为什么说又呢,因为印象中这家公…

单链表(第二部分)单链表的实现!!!

1.单链表的头文件 #pragma once #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<string.h> #include"contact.h"typedef struct PersonInfo SLTDataType; typedef struct SListNode {…

技术文档工具『Writerside』抢鲜体验

前言 2023 年 10 月 16 日&#xff0c;JetBrains 宣布以早期访问状态推出 Writerside&#xff0c;基于 IntelliJ 平台的 JetBrains IDE&#xff0c;开发人员可使用它编写、构建、测试和发布技术文档&#xff0c;可以作为 JetBrains IDE 中的插件使用&#xff0c;也可以作为独立…

2023年中国汽车塑料模具市场规模、竞争格局及行业趋势分析[图]

汽车注塑模具主要用来制造汽车内外饰件以及座椅等其他塑料零部件&#xff0c;其中又以汽车内外饰件模具最多。汽车内外饰件主要由各类塑料、表皮、织物或复合材料制成&#xff0c;用到的模具主要是塑料模具。从现代汽车使用的材料来看&#xff0c;无论是外装饰件、内装饰件&…

【剑指Offer】36.二叉搜索树与双向链表

题目 输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的双向链表。如下图所示 数据范围&#xff1a;输入二叉树的节点数 0≤n≤1000&#xff0c;二叉树中每个节点的值 0≤val≤1000 要求&#xff1a;O(1)&#xff08;即在原树上操作&#xff09;&#xff0c;时间…

爱尔眼科眼底病论坛糖网病变智能(AI)监测防治培训举办!

为推动四川省眼科学领域的学科建设、规范诊疗行为、提高学术水平&#xff0c;促进国内眼底病学学术交流。由成都高新医学会主办&#xff0c;爱尔眼科集团、爱尔眼科四川省区承办的成都高新医学会第二届眼科学术会议一一爱尔眼科眼底病论坛暨糖尿病视网膜病变智(AI)终生监测防治…

读卡器+芯片

RFID Reader 产品参数 产品型号 RFID Reader 尺寸(mm) 104*70*11.7mm 外观颜色 黑 材质 ABS 接口 MINI 功率 0.1W 电源 5V/1A 读卡距离 40mm 工作温度 -40~85℃ 工作频率 13.56Mhz 串口功能 支持 支持协议 ISO/IEC 14443、ISO/IEC 15693 产品参数 …

2023年中国石英矿资源现状及行业市场供需分析[图]

石英矿为常见的非金属矿物质&#xff0c;具有储量大、分布广、易开采等特点&#xff0c;根据不同成矿特性和理化特性&#xff0c;石英矿物可分为岩浆岩型、变质型、热液型、沉积型&#xff0c;对应的石英岩分别为花岗伟晶岩、脉石英岩、石英岩和石英砂岩。 石英矿物类型和特点…

关于在公众号刷到自己博客这件事

微信公众号 探索云原生 正式启用了&#xff0c;欢迎大家关注。 吐槽&#xff1a;竟然在微信公众号刷到自己的文章&#x1f923;&#xff0c;这也太巧了吧。 吐槽&#xff1a;这也太巧了吧 周五&#xff0c;开心的下班回到家&#xff0c;刷会微信。 发现关注的某大佬的公众号又…

laravel框架介绍(二) composer命令下载laravel报错

1.composer命令下载laravel报如下错 &#xff1a; curl error 18 while downloading https://repo.packagist.org/p2/symfony/uid.j son: transfer closed with 3808 bytes remaining to read&#xff0c;具体为 解决方案&#xff1a;执行以下命令切换镜像 >composer con…

滚动条样式美化

css手搓 <script setup> import { ref } from "vue"; </script><template><div class"ii"><div>ssssssssssssss</div><div>ssssssssssssss</div><div>ssssssssssssss</div><div>sssss…

【Python语言速回顾】——函数模块类与对象

目录 引入 一、函数 1、函数概述 2、参数和返回值 3、函数的调用 二、模块 1、模块概述 2、模块应用实例 三、类与对象 1、面向对象概述 2、类 3、类的特点 引入 为了使程序实现的代码更加简单。需要把程序分成越来越小的组成部分&#xff0c;3种方式——函数、对象…

10.26 来 CNCC 2023 T16 展位,TDengine 精美周边等你来领!

10 月 26 日你在哪&#xff1f; 这一天 TDengine 在美丽的大沈阳&#xff01; 没错 TDengine 受邀来参加中国计算机大会&#xff08;CNCC2023&#xff09;啦 在 CNCC T16 展位上 我们准备了很多精美周边礼品 等你来面基&#xff01; 另外我们还有一个好消息要分享 如果有…

Python-Pychram使用

1. pip命令安装库 一般pip安装库包&#xff0c;直接用下面命令即可&#xff1a; pip install package_name 指定安装库包的版本 pip instal package_namex.x.x 使用镜像源提高下载的速度&#xff08;这里用清华镜像源&#xff09; pip intall package_name -i https://pypi.tu…

公司如何选择数据防泄密软件

随着互联网信息的发展&#xff0c;很多企业的各类数据都是以电子文件的形式保存在员工电脑上&#xff0c;数据泄露的问题频发&#xff0c;并且在呈不断增加的趋势&#xff0c;造成的各种损失也是呈扩大的态势。具体分析这些数据泄露事件的发生原因&#xff0c;80%以上都是因为内…

【Python语言速回顾】——异常文件操作

目录 一、异常 1、检测异常try语句 2、抛出异常 3、异常处理流程 二、文件操作 1、打开文件 ①文件模式acess_mode ②文件缓冲区 2、基本的文件方法 ①读和写、关闭文件 ②读取行 ③文件重命名 ④删除文件&#xff08;系统中已存在的文件&#xff09; 3、基本的目…

[C++随想录] 二叉搜索树

搜素二叉树 二叉搜索树的使用二叉搜索树的模拟实现(K)整体结构循环版本递归版本 二叉搜索树的应用源码(kv) 二叉搜索树的使用 二叉搜索树 相较于 普通的二叉树来说: 根节点的左子树的所有键值都 小于 根节点, 根节点的右子树的所有键值 大于 根节点根节点的 左右子树 都是 二…

mac上mongodb 以及可视化工具 下载以及安装

简介 1. 下载 官网上的下载地址藏得非常深&#xff0c;不花老半天 根本找不到 下载地址 https://www.mongodb.com/try/download/community 目前最新社区版本7.0.2 下载链接 mac intel芯片 &#xff1a; https://fastdl.mongodb.org/osx/mongodb-macos-x86_64-7.0.2.tgz ma…

地面领域的“大疆”?通用足式机器人公司逐际动力获近2亿融资!

原创 | 文 BFT机器人 近日&#xff0c;通用足式机器人公司逐际动力完成天使轮和Pre-A轮融资&#xff0c;总金额近2亿元。逐际动力是一家通用足式机器人公司&#xff0c;成立于2022年&#xff0c;全球总部位于中国深圳&#xff0c;专注于运动智能&#xff08;Motion Intelligen…