快速理解记忆存储过程中的三种参数模式in,out,inout

快速理解记忆存储过程中的三种参数模式in,out,inout

第一次在CSDN写日记,起因是想以后能在这个平台留有持续学习的动力,以及和大家分享交流心得的机会,再者自己遇到这个问题的时候查了很多资料,对于我这个理解能力有限的小白,很难快速明白或者说单纯的记住这个问题的作用,所以写了这篇不算文章的日记,希望大家多多指正,多多鼓励。以下自我理解和专业知识有出入的地方我会认真反思和吸取经验。

IN - 是默认模式。在存储过程中定义IN参数时,调用程序必须将参数传递给存储过程。
另外,IN参数的值被保护。这意味着即使在存储过程中更改了IN参数的值,在存储过程结束后仍保留其原始值。换句话说,存储过程只使用IN参数的副本。
OUT - 可以在存储过程中更改OUT参数的值,并将其更改后新值传递回调用程序。请注意,存储过程在启动时无法访问OUT参数的初始值。
INOUT -
INOUT参数是IN和OUT参数的组合。这意味着调用程序可以传递参数,并且存储过程可以修改INOUT参数并将新值传递回调用程序。

这种解释大多都是偏定义性质的,说过来说过去,单单的拆开来看都理解,一旦形成一句话就不好理解了,所以我感觉很多文章都有这种现象,自己感觉懂了,其实还是不懂,只是单独的记了下来,再有一种是,自己确实也懂了,写了出来,别人不懂你思路的点,我希望我的能让大家理解我浅显的思路,便于记忆。

我自己的浅显理解是 :

**模式参数in:**只在成员变量进入一瞬间 ,只是形式参数被成员变量影响赋值,之后过程中就互相不影响了,形式参数从始至终就没影响到成员变量。
**模式参数out:**成员变量和形式参数的关联只在结果。过程中一点互不影响,只体现在结果上。只有外,里无关。
**模式参数inout:**同时具有in和out的特点。此时成员变量的值传给形式参数,之后过程中互不影响,过程外的成员变量结果由过程中的参数变量决定。

不论是成员变量还是形式参数 只要自己重新赋值就相应的改变。

代码(草稿):

定义成员变量:

set @a_1=1;–定义成员变量@a_1
set @b_2=2;–定义成员变量@b_2
set @c_3=3;–定义成员变量@c_3

创建过程 test_pro

DELIMITER $$
CREATE procedure test_pro(in a int,out b int,inout c int)–创建过程
BEGIN

select @a_1,@b_2,@c_3;
select a,b,c;

set a = 11;
set b = 22;
set c = 33;
select @a_1,@b_2,@c_3;
select a,b,c;

set @a_1=111;
set @b_2=222; 
set @c_3=333;
select @a_1,@b_2,@c_3;
select a,b,c;

END
$$
DELIMITER ;

call test_pro(@a_1, @b_2, @c_3);–调用过程

select @a_1,@b_2,@c_3; 查询成员变量

select a,b,c;查询内部变量

创建结果:
在这里插入图片描述
查询结果
在这里插入图片描述
在这里插入图片描述

1、大家可以根据过程内部不同的时间段,成员变量和形式参数值得变化;
2、还要跳出过程后 特意查询一组数据进行对比 。
3、同时还要纵向对成员变量和形式参数自己作比较。

就结果而言:【以下的变与不变 以及所说的影响或者互不影响都是相对于形式参数和成员变量而言】
第一组
成员变量:@a_1 ,@b_2, @C_3就是初始值;
@a_1=1;
@b_2=2;
@C_3=3;
形式参数 :a 模式in(以下用模式参数代替对应的形式参数):被成员变量影响了 ——变 -----a=@a_1=1;
b模式out:从传入到过程中互不影响——不变 由于形式参数无初始值—b=null;
c模式nout :被成员变量影响了 ——变 -----c=@c_3=3;
第二组 形式参数被重新赋值
成员变量:@a_1 —不被形式参数影响----变—@a_1=a =1;
@b_2----不被形式参数影响----不变—@b_2=2;
@c_3—不被形式参数影响—变---@c_3=3;
形式参数:a b c 在执行过程中被重新赋值 所以等于被赋的值
a=11;
b=22;
c=33;
第三组:成员变量被重新赋值
成员变量:@a_1 ,@b_2, @C_3就是被重新赋的值;
@a_1=111;
@b_2=222;
@c_3=333;
形式参数 : a 模式in(以下用模式参数代替对应的形式参数): ----变 -----a=@a_1=11;
b模式out:由于执行过程中和参数变量互不影响—不变 —b=22
c模式nout : ----变 -----c=@c_3=33;

第四组:跳出过程查询;
查询成员变量:@a_1 ,@b_2, @C_3就是被重新赋的值;
@a_1自始至终,从过程内外,都在互相影响所以 @a_1就等于过程中最后一次变化的值 所以@a_1 =111;
@b_2过程中互不影响 跳出过程被影响等于形式参数最后的值@b_2=22;
@c_3=333过程外和@a_2一样被影响等于形式参数最后的值@c_3=33;
形式参数 : a 模式in(以下用模式参数代替对应的形式参数):被成员变量互相影响了 ——变 -----a=@a_1=111;
b模式out:由于执行过程中和参数变量互不影响——不变 —b=22
c模式inout :被成员变量影响了 ——变 -----c=@c_3=333;

备注:在创建SQL代码还犯了一些细节上的错误在这里也一一列出;
1、CREATE procedure test_pro(in a int,out b int,inout c int) 这句后面不要加分号;
2、procedure不要写成procuder 更不要写成produce
3、如果你不是先创建的成员变量就创建了过程,结果可能有出入,也可能就算你创建过程删除重新创建了,之前过程中的成员变量也会保存,所以在创建过程前统一重新给成员变量赋值,然后在创建该过程
4、用(use)库之后在创建过程
5、调用不要加procedure ,删除要加上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值