`
hudeyong926
  • 浏览: 2032907 次
  • 来自: 武汉
社区版块
存档分类
最新评论

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" 类型参数。

参数的默认值,存储过程的参数可以设置默认值

create or replace procedure procdefault(p1 varchar2,p2 varchar2 default 'mark')

 

 

 

分享到:
评论

相关推荐

    详解MySQL存储过程参数有三种类型(in、out、inout)

    在MySQL中,存储过程的参数有三种类型:in、out、inout,它们分别对应不同的数据传递方式。 1. **in参数**: `in`参数类似于C语言中的值传递,它将外部变量的值传递到存储过程内部。在存储过程中,`in`类型的参数...

    在MySQL中创建带有IN和OUT参数的存储过程的方法

    在MySQL 入门教程中,我们能够看到很多关于如何创建储存过程 和如何利用 IN 和 OUT 参数调用存储过程的示例。这些示例都很简单,能够很好的帮助你理解 MySQL 中创建带参数存储过程的语法。这些示例已在 MySQL 5.5 中...

    mysql数据存储过程参数实例详解

    MySQL 存储过程参数有三种类型:in、out、inout。它们各有什么作用和特点呢? 一、MySQL 存储过程参数(in) MySQL 存储过程 “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数...

    mysql存储过程教程

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列SQL语句并封装成一个可重复使用的单元,从而提高数据处理的效率和代码的复用性。本教程将深入探讨MySQL存储过程的创建、调用以及相关概念...

    java调用存储过程(含out参数)

    4. **设置IN参数**:如果存储过程有`IN`参数,使用`setXXX()`方法(这里的`XXX`根据参数类型选择,如`setString()`, `setInt()`等)设置参数值。这些参数通常是输入数据,对存储过程进行操作。 5. **设置OUT参数**...

    MySQL 存储过程

    MySQL存储过程支持三种类型的参数:IN、OUT 和 INOUT。 1. **IN 参数** - 定义:表示输入参数,即调用存储过程时必须传递给它的值。 - 特性:在存储过程中修改IN参数的值不会被返回到调用程序。 - 示例: ```...

    mysql存储过程之返回多个值的方法示例

    要开发返回多个值的存储过程,需要使用带有INOUT或OUT参数的存储过程。咱们先来看一个orders表它的结构: mysql> desc orders; +----------------+-------------+------+-----+---------+-------+ | Field | Type |...

    mysql 存储过程详解

    MySQL 存储过程是 MySQL 数据库中的一个重要功能,自 MySQL 5.0 起开始支持存储过程,存储过程是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储...

    mysql存储过程实例

    inout 表示定义的参数可传入存储过程,并可以被存储过程修改后传出存储过程,存储过程默认为传入参数,所以参数 in 可以省略。第二部分为参数名。第三部分为参数的类型,该类型为 MySQL 数据库中所有可用的字段类型...

    MySQL存储过程实例教程

    - **参数类型:**MySQL存储过程支持`IN`(输入)、`OUT`(输出)、`INOUT`(输入输出)三种参数类型,允许灵活地传递与返回数据。 **参数详解:** - `IN`:输入参数,用于接收外部传入的数据,其值在存储过程中不...

    MySQL存储过程学习

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列的SQL语句,形成一个可重复使用的代码块,以提高数据处理的效率和应用程序的性能。在这个"MySQL存储过程学习"的主题中,我们将深入探讨...

    MySQL 存储过程入门到精通

    MySQL存储过程是数据库管理系统中的一个重要特性,它允许程序员或数据库管理员预先定义一组SQL语句,形成一个可重用的逻辑单元。在这个“MySQL存储过程入门到精通”资料中,你将深入理解存储过程的原理、创建、调用...

    玩转MySQL存储过程

    ### 玩转MySQL存储过程 #### 一、存储过程简介及优势 存储过程是一种预编译的SQL语句集合,存储在数据库中,通过指定名称及其参数来调用执行。这种特性使得存储过程能够在执行时更加高效地完成特定任务。 **主要...

    MySQL存储过程:数据库编程的高级艺术

    ### MySQL存储过程:数据库编程的高级艺术 #### 引言:存储过程的魔力 存储过程作为数据库领域中的一种高级特性,在提升数据处理效率及增强安全性方面扮演着至关重要的角色。MySQL作为广受青睐的关系型数据库管理...

    MYSQL存储过程教程

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预定义一组SQL语句,并将其封装成一个可重复使用的单元。这个教程将深入讲解如何在MySQL中创建、调用和管理存储过程,以及它们在实际应用中的价值。 ...

    MySQL存储过程系统学习资料

    CREATE PROCEDURE 过程名 (IN/OUT/INOUT 参数名 数据类型, ...) BEGIN SQL语句; END ``` 2. **编写SQL语句**:在BEGIN和END之间,你可以编写任意数量的SQL语句,包括SELECT、INSERT、UPDATE、DELETE等操作。 3. *...

    MySQL存储过程实例教程.doc

    MySQL 存储过程的参数用在存储过程的定义,共有三种参数类型:IN, OUT, INOUT。 IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值。 OUT 输出参数:该值可...

Global site tag (gtag.js) - Google Analytics