超详细讲解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),存储过程 ...
随机推荐
- ubuntu下创建http服务器
使用ubuntu搭建一个简单的http服务器安装apache21.sudo apt-get update2.sudo apt-get install apache2 安装成功后,再/etc/apach ...
- SpringBoot+MySQL,如何整合并使用MyBatis框架
概述 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. MyBatis 可以使用简单的 ...
- python中的时间和时间格式转换
1.python中的时间:要得到年月日时分秒的时间: import time #time.struct_time(tm_year=2012, tm_mon=9, tm_mday=15, tm_hour ...
- [MIT6.006] 5. Binary Search Trees, BST Sort 二分搜索树,BST排序
第5节课主要讲述了二分搜索树概念和BST排序.讲师提出一个关于"跑道预订系统"的问题,假设飞机场只有一个跑道,飞机需要为未来降落时间t进行预订,如果时间集合R中,在t时间前后k分钟 ...
- MyBatis——MyBatis开发流程
创建项目(IDEA中) 在IDEA中创建 MyBatis项目,详细流程如下: 这里有一点需要注意,我们创建的是Maven项目,如果大家以前没有配置过Maven环境的话,在创建完项目之后,需要配置一下M ...
- 剑指offer刷题(Tree)
开篇 二刷剑指offer了,本来用Tyora记的笔记,发现字数到四万了就变得好卡o(╥﹏╥)o,刚好开始写博客,就转过来吧,记下来子自己看.不废话,开刷... JZ26. 树的子结构 输入两棵二叉树A ...
- go编译成exe后,打开出现闪退问题
今天博主编译了一个go小脚本,编译完成后用自己电脑试了一下没有问题 然而,当换了一台电脑后,一样是win7系统64位,出现了闪退 于是乎博主疯狂百度 看到网上说 入口文件 的顶部改成 packa ...
- wireshark分析nmap和metasploit内置的syn扫描
syn扫描 syn扫描,根据三次握手,向端口发送syn包,如果对方回应SYN/ACK,则证明端口开放 首先是nmap 速度很快,0.67秒完成,看下wireshark的抓取 一次发送了大量的syn包 ...
- 03python开发之流程控制
03 python开发之流程控制 目录 03 python开发之流程控制 3 流程控制 3.1 流程判断之if判断 3.1.1 代码块 3.1.2 if判断基础语法 3.1.3 案例 3.1.4 if ...
- Folx使用教程:怎么通过设置标签分类下载内容
很多Mac OS下载软件从网上下载各种各样的文件,一般默认都会存放在"下载"文件夹中.如果不是经常整理"下载"文件夹,久而久之,该文件夹会变得庞大而杂乱. 如果 ...