《mysql存储过程编程》之3种参数模型详细说明

本文深入探讨了MySQL存储过程中使用的三种参数模型:IN、OUT和INOUT参数,详细解释了它们的区别和使用场景,帮助读者更好地理解和运用存储过程进行数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 JSON Code 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

 

mysql存储过程的3种参数模型详细说明
--IN 只读模式
--OUT 可写模式
--INOUT 可读写模式

IN
    除非被具体定义,否则参数都假定 IN 属性。这意味这他们的值必须被主叫程序所指定,并且任何在存储程序内部
    对该参数的修改都不能在主叫程序中起作用(类似于JAVA编程中的值传递,在方法内部修改这个参数后主调方法中的该变量不受影响)
OUT
    一个 OUT 参数可以被存储程序所修改,并且这个被修改的值可以在主叫程序中生效,主叫程序必须提供一个变量来
    接受由 OUT 参数输出的内容,但是存储程序本身并没有对这个可能已经初始化的变量的操作权限,当存储程序开始
    时,任何 OUT 变量的值都被赋值为 NULL,不管这个值在主叫程序中是否被赋予其他值。
    (OUT类型的参数只用来做返回值,不管这个值之前有没有被赋值,存储过程都会把它设置为NULL)

    CREATE PROCEDURE P11(OUT T1 VARCHAR(10),IN FLAG INT)
    BEGIN
        IF FLAG=1 THEN 
            SET T1='CHANGED..';
        END IF;
    END $$

    MYSQL>> SET @T1='CRUDE..';
    MYSQL>> CALL P11(@T1,2);
    MYSQL>> SELECT @T1 ; --> NULL P11存储过程没有做任何处理,@T1自动转换为NULL
     
    MYSQL>> CALL P11(@T1,1);
    MYSQL>> SELECT @T1 ; --> 'CHANGED..'    
INOUT
    INOUT 参数同时扮演着 IN 和 OUT 参数的角色。那意味着,主叫程序可以提供一个值,而被叫程序自身可以修改这
    个参数的值,并且当存储程序结束时主叫程序对该修改后的值具有访问权限
    CREATE PROCEDURE P12(INOUT VALUE VARCHAR(20),IN FLAG INT)
    BEGIN
        IF FLAG=1 THEN
            SET VALUE='CHANGED...';
        END IF;
    END $$
    
        MYSQL>> SET @T1='CRUDE...';
        MYSQL>> CALL P11(@T1,2);
        MYSQL>> SELECT @T1 ; --> CRUDE... P11存储过程没有做任何处理,INOUT类型的@T1为原来的值(IN类型参数的特性)
        
        MYSQL>> CALL P11(@T1,1);
        MYSQL>> SELECT @T1 ; --> 'CHANGED..' 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值