- 浏览: 204416 次
- 性别:
- 来自: 北京
文章分类
最新评论
MySQL 存储过程参数有三种类型:in、out、inout。它们各有什么作用和特点呢?
一、MySQL 存储过程参数(in)
MySQL 存储过程 “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible)。
drop procedure if exists pr_param_in; create procedure pr_param_in ( in id int -- in 类型的 MySQL 存储过程参数 ) begin if (id is not null) then set id = id + 1; end if; select id as id_inner; end;
set @id = 10; call pr_param_in(@id); select @id as id_out;
mysql> call pr_param_in(@id); +----------+ | id_inner | +----------+ | 11 | +----------+ mysql> select @id as id_out; +--------+ | id_out | +--------+ | 10 | +--------+
可以看到:用户变量 @id 传入值为 10,执行存储过程后,在过程内部值为:11(id_inner),但外部变量值依旧为:10(id_out)。
二、MySQL 存储过程参数(out)
MySQL 存储过程 “out” 参数:从存储过程内部传值给调用者。在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值。
drop procedure if exists pr_param_out; create procedure pr_param_out ( out id int ) begin select id as id_inner_1; -- id 初始值为 null if (id is not null) then set id = id + 1; select id as id_inner_2; else select 1 into id; end if; select id as id_inner_3; end;
set @id = 10; call pr_param_out(@id); select @id as id_out;
mysql> set @id = 10; mysql> mysql> call pr_param_out(@id); +------------+ | id_inner_1 | +------------+ | NULL | +------------+ +------------+ | id_inner_3 | +------------+ | 1 | +------------+ mysql> select @id as id_out; +--------+ | id_out | +--------+ | 1 | +--------+
可以看出,虽然我们设置了用户定义变量 @id 为 10,传递 @id 给存储过程后,在存储过程内部,id 的初始值总是 null(id_inner_1)。最后 id 值(id_out = 1)传回给调用者。
三、MySQL 存储过程参数(inout)
MySQL 存储过程 inout 参数跟 out 类似,都可以从存储过程内部传值给调用者。不同的是:调用者还可以通过 inout 参数传递值给存储过程。
drop procedure if exists pr_param_inout; create procedure pr_param_inout ( inout id int ) begin select id as id_inner_1; -- id 值为调用者传进来的值 if (id is not null) then set id = id + 1; select id as id_inner_2; else select 1 into id; end if; select id as id_inner_3; end;
set @id = 10; call pr_param_inout(@id); select @id as id_out;
mysql> set @id = 10; mysql> mysql> call pr_param_inout(@id); +------------+ | id_inner_1 | +------------+ | 10 | +------------+ +------------+ | id_inner_2 | +------------+ | 11 | +------------+ +------------+ | id_inner_3 | +------------+ | 11 | +------------+ mysql> mysql> select @id as id_out; +--------+ | id_out | +--------+ | 11 | +--------+
从结果可以看出:我们把 @id(10),传给存储过程后,存储过程最后又把计算结果值 11(id_inner_3)传回给调用者。 MySQL 存储过程 inout 参数的行为跟 C 语言函数中的引用传值类似。
通过以上例子:如果仅仅想把数据传给 MySQL 存储过程,那就使用“in” 类型参数;如果仅仅从 MySQL 存储过程返回值,那就使用“out” 类型参数;如果需要把数据传给 MySQL 存储过程,还要经过一些计算后再传回给我们,此时,要使用“inout” 类型参数。
发表评论
-
Linux下mysql定时备份操作
2012-08-17 16:22 9381.操作系统[root@localhost ~]# ca ... -
mysql 密码修改
2012-08-17 16:24 879>mysql -u root -p Enter pa ... -
CentOS mysqldb 安装
2012-08-13 14:00 1169安装: http://pypi.python.org/pyp ... -
mongodb安装windows服务
2012-07-19 14:46 1088Mongodb的windows服务安装和卸载 ... -
mysql cursor游标的使用,实例
2012-03-28 16:36 31641mysql被oracle收购后,从mysql-5.5开始 ... -
mysql 存储过程中不能使用 return 的解决办法
2012-03-28 15:22 13427大家都知道,mysql 的存储过程是不能使用 ... -
mysql 存储过程
2012-03-28 13:51 10391.存储过程只在创造时进行编译,以后每次执行存储过程都不 ... -
在Centos下启用mysql的远程访问账号
2012-02-13 11:32 2207在Centos下启用mysql的远程访问账号 在默 ... -
ubuntu 下安装mysql , mysql允许用户远程连接
2012-02-10 16:35 2863一,安装MySQL sudo apt-get inst ... -
mysql 创建数据库时指定字符
2011-04-08 10:12 1033先mysql进入: GBK: create databa ... -
linux 下导出 mysql 命令
2011-03-28 14:27 1160在linux 下导出 Mysql 数据库的方法 my ... -
mysql 杂谈
2011-03-07 15:06 7881、mysql 连接字符串: select CONCA ... -
mysql 杂谈
2011-03-07 14:57 7361、mysql 连接字符串: select CONCA ... -
centos 下mysql的最常用的操作指令
2010-10-15 15:45 10411、service mysqld status 查看my ... -
在mysql 中导入 .sql 文件
2010-10-15 15:22 936当需要导入到一个mysql 中数据表结构的时候,可以如下操作: ... -
mysql 创建数据库时指定编码
2010-10-15 15:15 1224mysql 创建 数据库时指定编码很重要,很多开发者都使用了默 ...
相关推荐
要开发返回多个值的存储过程,需要使用带有INOUT或OUT参数的存储过程。咱们先来看一个orders表它的结构: mysql> desc orders; +----------------+-------------+------+-----+---------+-------+ | Field | Type |...
总结,MySQL的存储过程是提升数据库管理效率的重要工具,掌握其使用方法和最佳实践对于数据库设计和开发人员至关重要。通过学习和实践,你可以更好地利用存储过程来优化数据处理流程,提高系统性能。
4. **设置IN参数**:如果存储过程有`IN`参数,使用`setXXX()`方法(这里的`XXX`根据参数类型选择,如`setString()`, `setInt()`等)设置参数值。这些参数通常是输入数据,对存储过程进行操作。 5. **设置OUT参数**...
MySQL存储过程支持三种类型的参数:IN、OUT 和 INOUT。 1. **IN 参数** - 定义:表示输入参数,即调用存储过程时必须传递给它的值。 - 特性:在存储过程中修改IN参数的值不会被返回到调用程序。 - 示例: ```...
在这个“MySQL存储过程入门到精通”资料中,你将深入理解存储过程的原理、创建、调用以及优化方法。 一、存储过程的基本概念 存储过程是由一系列SQL语句组成的程序,存储在数据库服务器上,可以被多次调用执行,...
MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预定义一组SQL语句,并将其封装成一个可重复使用的单元。这个教程将深入讲解如何在MySQL中创建、调用和管理存储过程,以及它们在实际应用中的价值。 ...
MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预定义一组SQL语句,然后作为一个单元来执行。在MySQL 5.0版本之后,存储过程得到了广泛的支持,为数据库操作提供了许多优势,如提高性能、增强安全性...
- 参数模式有IN、OUT、INOUT三种,根据存储过程的参数类型正确设置。 通过以上步骤,你已经掌握了如何在MyBatis中调用MySQL存储过程的基本方法。在实际开发中,这将极大地提升你的数据库操作效率,使你能够更好地...
本篇文章将深入探讨MySQL中的分页存储过程及其代码调用方法。 首先,理解分页的基本概念。在网页或应用程序中,我们通常会看到“上一页”、“下一页”这样的导航,这就是分页的表现形式。分页查询通过设置每页显示...
本文将详细介绍MySQL存储过程与函数的相关概念、创建方法以及使用技巧。 #### 二、存储过程与函数的区别 - **存储过程**(Stored Procedure):是一系列SQL语句的集合,它可以接受输入参数并返回多个结果集和...
在MySQL中,存储过程是一种预编译的SQL语句集合,它们可以包含输入(IN)、输出(OUT)以及输入/输出(INOUT)参数,用于封装和重用复杂的数据库操作。本文将详细介绍如何在MySQL中创建带有IN和OUT参数的存储过程。 ...
以上内容概述了MySQL存储过程和函数的基本概念、创建方法、变量定义、条件处理、流程控制、游标使用、预处理语句以及常见问题。通过这些知识点的学习,可以帮助开发者更好地理解和应用MySQL存储过程和函数,从而提高...
本教程将详细介绍 MySQL 存储过程的概念、优点、创建和使用方法。 1. 存储过程简介 存储过程是数据库存储的一个重要的功能,它是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中,用户通过指定存储...
此过程涉及使用`StructDescriptor`和`ArrayDescriptor`创建描述符,然后使用这些描述符构建`STRUCT`和`ARRAY`对象,最终作为参数传递给存储过程。 ```java private static ARRAY getOracleArray(Connection con, ...
MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列SQL语句并封装成一个可重复使用的单元。这种技术在处理复杂的业务逻辑、提高数据操作效率以及减少网络通信量方面具有显著优势。本篇文章将...
IN参数使用setXXX()方法,OUT或INOUT参数需要先设置一个初始值,再使用registerOutParameter()方法指定参数索引和类型。 5. 执行存储过程:调用CallableStatement的execute()方法。 6. 获取结果:如果是查询型存储...
通过本文的学习,我们了解了MySQL存储过程的基础概念、创建方法、调用方式以及如何使用参数来增强其灵活性和功能性。存储过程不仅可以帮助开发者简化复杂操作,还能提高应用程序的性能和安全性。随着进一步的学习和...
CREATE PROCEDURE sp_name ([IN|OUT|INOUT] 参数名 参数类型 [, ...]) BEGIN -- SQL 语句和过程控制语句 END; ``` 例如: ```sql CREATE PROCEDURE sp_name () BEGIN -- 过程体 END; ``` #### 2. 调用存储过程 ...