mysql存储过程的3种参数模型详细说明
来源:互联网 发布:基德2011总决赛数据 编辑:程序博客网 时间:2024/05/29 07:47
JSON Code
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..'
--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..'
阅读全文
0 0
- mysql存储过程的3种参数模型详细说明
- MySQL存储过程的参数
- MySQL参数DELAY_KEY_WRITE的详细说明
- mysql 带参数的存储过程
- mysql 带有无参数的存储过程
- Mysql 存储过程编写说明
- mysql存储过程详细教程
- MySql存储过程详细教程
- mysql存储过程详细教程
- mysql存储过程详细教程
- mysql存储过程详细教程
- mysql存储过程详细教程
- mysql存储过程详细教程
- java调用存储过程详细说明
- MySQL 存储过程 参数类型
- mysql 存储过程输入输出参数
- mysql 存储过程传出参数
- mysql存储过程参数比较
- 并发insert情况下会发生重复的数据插入问题
- 像素与viewport概念
- 浅谈响应式
- 监听浏览器复制粘贴事件
- 软件测试方法——单元测试、集成测试、系统测试、确认测试
- mysql存储过程的3种参数模型详细说明
- 最优化方法预备知识
- TensorFlow学习日记15
- 控制反转(IOC)和依赖注入(DI)的区别
- 浏览器加载、解析、渲染的过程
- 笨方法学习Python-习题37: 复习各种符号
- 每日一练2017-10-30
- 谁的青春没有遗憾?RNG你们已经很棒了
- 量子通讯加密技术的技术原理