MySQL 您所在的位置:网站首页 mysql存储过程内部调用存储过程 MySQL

MySQL

2023-12-12 20:42| 来源: 网络整理| 查看: 265

MySQL--存储过程、局部变量与用户变量[@](初步认识) 1、什么是存储过程1.1存储过程的定义与作用1.1存储过程的创建与调用 2、局部变量与用户变量2.1 局部变量2.2 用户变量 3、题目部分4、文末彩蛋--轻松一刻       更多关于数据库知识请加关注哟~~。若需联系博主请私信或者加博主联系方式:       QQ:3327908431       微信:ZDSL1542334210

        前言:存储过程,一个神奇的方法,学MySQL不学存储过程是不完整的,那么它究竟神奇在哪儿?今日说法博主带你走进揭秘存储过程…咳咳…我承认我有装*了。说明一点博主是将其理解为自编函数!请跟着我的脚步慢慢来~~

1、什么是存储过程 1.1存储过程的定义与作用

        存储过程是一条或者多条SQL语句的集合,存储过程可以帮助我们:1、简化操作,减少冗余的操作步骤;2、 减少操作过程中的失误,提高工作效率。所以存储过程非常有用,应该尽可能学会和使用它。博主自己理解为是一种自编函数,但是与自变函数又不同的是它可以直接保存在MySQL里面以便直接使用,而自编函数得运行或者封装后方可调用。

1.1存储过程的创建与调用 delimiter // # 实现两个整数相加的存储过程 create procedure test(in a int, in b int) #创建存储过程 begin end // delimiter ; call test(2, 3); # 调用存储过程

        解释:‘delimiter//’ 是将MySQL的结束符设置为’//’。因为MySQL默认的语句结束符号为’;’,为了避免与存储过程中SQL语句结束符相冲突,需要使用’delimiter’改变存储过程的结束符,并以’end//'结束存储过程。存储过程定义完毕之后在使用’delimiter;'恢复默认结束符。         创建存储过程:create procedure (in a int, in b int) # 输入参数a和b,且指定为整型在begin…end里面写入你的代码功能语句。‘call ’调用刚刚写的存储过程。当然,如果不需要该存储过程删除就可以了drop procedure .你创建的存储过程在你当前的数据库下的Stored Procedures里面: 在这里插入图片描述

2、局部变量与用户变量 2.1 局部变量

        是一种变量赋值的方法,但是它只能在子程序中声明并使用,也就是在begin…end代码块中,也即在你们想要实现的SQL功能语句中。其变量的赋值为(记得只能在begin…end里面使用,脱离口没法使用):

a. 使用set语句为变量赋值: declare test int; # 介入一个赋值变量test set test = 1 + 2; # 对该变量进行传值 b. 使用select…into为变量赋值: declare test int; # 介入一个赋值变量test select 1 + 2 into test; # 对该变量进行传值 2.2 用户变量

        也是一种变量赋值的方法,用户变量与链接有关,一个客户端定义的变量不能被其他客户端看到或使用,该变量也是我们常用的。当客户端退出时,该客户端连接的所有变量将自动释放。具体的说就是一个被赋值的变量,它不受begin…end的代码块限制,介入方法形式与局部变量不同,它是“@var_name”形式,不需要用declare定义。赋值为:

a. 使用SET语句为变量赋值: set @test = 1 + 2; select @test; b. 使用select …into为变量赋值: select 1 + 2 into @test; select @test;

        讲完理论知识,不来点题目冲刷一下,哪里找得到泥土里面埋藏的珍珠?

3、题目部分

题目一:请写出一个和sum函数相同功能的存储过程,完成两个数的相加

delimiter // # 法一 用户变量 create procedure sums(in a int,in b int) begin select a+b into @sumvalue; #这里是用户变量,看“@”符号 select @sumvalue; end // delimiter ; call sums(32,32); # 调用存储过程 -- ----------------------------------------------------------------------------- delimiter // # 法二 局部变量 create procedure sumss(in a int,in b int) begin declare valus int select a+b into valus; #这里是局部变量,无“@”符号 select valus; end // delimiter ; call sumss(32,32); # 调用存储过程 # 结果为:64

题目二:请写出一个存储过程,完成两个数的相加后减去第三个数

delimiter // create procedure texts(in a int,in b int,in c int) begin select (a+b)/c into @sumvalue; #这里是用户变量,看“@”符号 select @sumvalue; end // delimiter ; call texts(2,4,6); # 调用存储过程 # 结果为: 1.00

题目三(OUT参数):请写出一个存储过程,完成两个数的相加后OUT给第三个数

-- out类型参数 delimiter // create procedure outtest(in a int, in b int, out c int) begin select a+b into c; -- select c; end // delimiter ; call outtest(3,3,@c); # 结果为 6

        可以看到,out参数是和以上两种参数的赋值方法不一样,被out的参数不需要声明和定义,只需要用out指定就可以了,在最后输出的就是该out参数。

4、文末彩蛋–轻松一刻

        真是人逢喜事精神爽呐,这不是刚过完国庆节嘛,前天打算去小熊家看看他和嫂子,于是就带上亮哥一起去他们家,这时候看见嫂子在给孩子喂奶,嫂子叫小熊去拿水果干给我们吃,然后亮哥呢出于礼貌,于是乎呢就上前摸摸孩子的脸,说:“宝贝好乖,白白胖胖的,皮肤真好,很漂亮!”然后我嫂子红着脸低声说:“孩子睡着了,脸在那边呢…”然后我一看呢,确实皮肤很好很白…

       今天到这里就结束了哟//每篇文章都有文末彩蛋–轻松一刻哟~加关注学习更多MySQL知识!谢谢观看,我是Jetuser-data

链接: [https://blog.csdn.net/L1542334210] CSND:L1542334210 在这里插入图片描述 祝大家工作顺利!阖家欢乐!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有