超详细讲解mysql存储过程中的in/out/inout
存储过程
大概定义:用一个别名来描述多个sql语句的执行过程。
- 最简单
delimiter //
create PROCEDURE p1()
begin
select * from userinfo;
end //
delimiter ; call p1(); - 传参(in, out, inout)
in 表示传入的参数, 可以传入数值或者变量,即使传入变量,并不会更改变量的值,可以内部更改,仅仅作用在函数范围内。
delimiter //
create procedure p2(
in v1 int
)
begin
set v1 = 2 * v1;
select v1;
end // delimiter ; call p2(19); ----------------
delimiter //
create procedure p6(
in v int
)
begin
set v = 10;
select v;
end //
delimiter ; call p6(10); set @v4 = 0;
call p6(@v4);
select @v4; -- 此时@v4依然为0
out 表示存储执行存储过程的返回结果,且参数只能是一个变量,且只能对其赋值(函数执行完以后也生效),不能在函数内获取其值。
delimiter //
create procedure p3(
out v int
)
begin
set v = 10;
end //
delimiter ; set @v1 = 0; # @varible_name 类似于定义一个局部变量,跟session一样
call p3(@v1);
select @v1; -----------------------------
delimiter //
create procedure p4(
out v int
)
begin
set v = v + 5; -- 这儿有问题,不能这样,只能直接赋值
select v;
end //
delimiter ;
-- 这段代码是有问题的。
delimiter //
create procedure p5(
out v int
)
begin
set v = 5; -- 对的
select v;
end //
delimiter ; set @v3 = 0;
call p5(@v3);
inout 表示从外部传入的参数经过修改后可以返回的变量,既可以使用传入变量的值也可以修改变量的值(即使函数执行完)。
delimiter //
create procedure p7(
inout v int
)
begin
set v = 9999;
select v;
end //
delimiter ; call p7(10); set @v5 = 0;
call p7(@v5);
select @v5; ------------------------------------ delimiter //
create procedure p8(
inout v int
)
begin
set v = v + 9999;
select v;
end //
delimiter ; set @v6 = 1;
call p8(@v6);
select @v6;
综上
- in只可以读取值/变量,不能更改
- out不能读,可以更改
- inout既可以读又可以更改
超详细讲解mysql存储过程中的in/out/inout的更多相关文章
- MYSQL存储过程中常使用的命令记录
MYSQL存储过程中常使用的命令记录 1.触发器trigger 查看:show triggers; 2.存储过程procedure 查看:show procedure status; 查看详细:sho ...
- MySQL存储过程中的3种循环,存储过程的基本语法,ORACLE与MYSQL的存储过程/函数的使用区别,退出存储过程方法
在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体 ...
- MYSQL存储过程中的IN、OUT和INOUT
MYSQL存储过程中的IN.OUT和INOUT,不能简单理解为一个方法的参数和返回值,而是面向整个过程上下文变量的. 一.MySQL 存储过程参数(in) 基本可以理解为传入function的参数,而 ...
- Mysql 存储过程中使用多游标
Mysql 存储过程中使用多游标 drop procedure IF EXISTS test_proc_1; create procedure test_proc_1() begin ; ) ; ) ...
- MySQL存储过程中使用SELECT …INTO语句为变量赋值
使用SELECT …INTO语句为变量赋值 在MySQL存储过程中,可以使用SELECT …INTO语句对变量进行赋值,该语句在数据库中进行查询,并将得到的结果赋值给变量.SELECT …INTO语句 ...
- 【转】MySQL存储过程中使用动态行转列
MySQL存储过程中使用动态行转列 最近做项目关于数据报表处理,然而数据库存储格式和报表展现形式不同,需要进行一下行转列的操作,在做上一个项目的时候也看了一下,但是后来换了读取方式,也就没深入研究这个 ...
- mysql -- 存储过程中 declare 和 set 定义变量的区别
mysql存储过程中,定义变量有两种方式:1.使用set或select直接赋值,变量名以 @ 开头.例如:set @var=1;可以在一个会话的任何地方声明,作用域是整个会话,称为会话变量. 2.以 ...
- mysql存储过程中 乱码问题解决办法
中文乱码无论在何时都是一个头疼的问题,mysql的存储过程参数也同样存在这个问题.1.直接使用insert into语句没问题,能够正常插入汉字.2.把insert into语句移到Procedure ...
- mysql 存储过程中limit
1.mysql的高版本(5.5),存储过程中的limit可以使用变量,如下:select * from student limit iStart,iNum; 2.mysql的低版本(5.1),存储过程 ...
随机推荐
- 01MySQL数据库介绍
一.数据库基本介绍 目标:了解数据库的功能和常见数据库分类.数据库产品 数据库基本知识 数据库分类 SQL简介 MySQL访问 1.数据库基本知识 目标:了解数据库的概念和数据库的作用 概念 数据库: ...
- Linux 升级内核开启 TCP BBR 有多大好处
前言 如果你有订阅一些科技新闻,应该会有看过内核在4.9当中加入了一个新的算法,来解决在有一定的丢包率的情况下的带宽稳定的问题,这个是谷歌为我们带来的干货,新的 TCP 拥塞控制算法 BBR (Bot ...
- 检查linux下服务器的带宽
设想:公司 A 有一个名为 bsdocfs 的存储服务器,并通过名为 beckham 的客户端节点装载 NFS.公司 A 确定他们需要从 bsdocfs得到更多的带宽,因为有大量的节点需要访问 bsd ...
- 【Python】Json序列化和反序列化模块dumps、loads、dump、load函数介绍
1.json.dumps() json.dumps()用于将dict类型的数据转成str,因为如果直接将dict类型的数据写入json文件中会发生报错,因此在将数据写入时需要用到该函数. 转换案例: ...
- Guitar Pro使用技巧之乐段回放练习
Guitar Pro中的"回放"功能是我们在吉他练习中非常常用的一项功能.我们在吉他练习中碰到某一乐段比较练习比较困难时,我们就可以用鼠标在Guitar Pro上选中该乐段,然后进 ...
- python中正则表达式
正则表达式是一种通用的字符串匹配技术,是不会因为编程语言不一样而发生变化的如果想查找对应规则的字符串,就可以用正则表达式python中要使用正则表达式需使用re模块,它是正则表达式在python中的封 ...
- 语音识别2 -- Listen,Attend,and Spell (LAS)
LAS是Listen(Encoder),Attend,和Spell(Decoder)的简称 第一个步骤Listen(Encoder) listen的作用是输入一段语音信号,输出一段向量,去掉语音中的杂 ...
- 分析一个免杀webshell发现的php特性
文章首发于t00ls,嫌文章太啰嗦的可以直接看结论 起源 之前看到别人分享的一个免杀webshell: <?php @$GLOBALS{next} = $GLOBALS[$GLOBALS[fun ...
- yii2.0 实现城市联动效果
<script type="text/javascript"> function getcitytext(){ citytext = ''; $(".city ...
- selenium如何处理H5视频
selenium处理H5视频主要使用的是javascript,javascript函数有内置的对象叫arguments,arguments包含了调用的参数组,[0]代表取第一个值. currentSr ...