但是存储过程对参数还有额外的要求,自己的参数分类:
- in:(值传递)参数从外部传入,在过程内部使用,可以是直接数据,也可以是保存数据的变量
- out:(引用传递)参数在过程中赋值,传入必须是变量,如果有外部数据,会被清空为null
- inout:(引用传递)数据可以从外部传入过程内部使用,同时内部操作之后,又回将数据返回给外部
代码示例:
-- 创建3个会话变量 set @var1 = 1; set @var2 = 2; set @var3 = 3; -- 查询会话变量 select @var1, @var2, @var3; +-------+-------+-------+ | @var1 | @var2 | @var3 | +-------+-------+-------+ | 1 | 2 | 3 | +-------+-------+-------+ 1 row in set (0.00 sec) -- 修改语句结束符 delimiter $$ -- 定义过程 create procedure my_pro3(in a int, out b int, inout c int) begin -- 查看传入的3个数据值 select a, b, c; -- +------+------+------+ -- | a | b | c | -- +------+------+------+ -- | 1 | NULL | 3 | -- +------+------+------+ -- 修改3个变量值 set a = 10; set b = 20; set c = 30; select a, b, c; -- +------+------+------+ -- | a | b | c | -- +------+------+------+ -- | 10 | 20 | 30 | -- +------+------+------+ -- 查看会话变量 select @var1, @var2, @var3; -- +-------+-------+-------+ -- | @var1 | @var2 | @var3 | -- +-------+-------+-------+ -- | 1 | 2 | 3 | -- +-------+-------+-------+ -- 修改会话变量 set @var1 = 'a'; set @var2 = 'b'; set @var3 = 'c'; select @var1, @var2, @var3; -- +-------+-------+-------+ -- | @var1 | @var2 | @var3 | -- +-------+-------+-------+ -- | a | b | c | -- +-------+-------+-------+ end $$ delimiter ; -- 调用过程 call my_pro3(@var1, @var2, @var3); -- 再次查看会话变量 mysql> select @var1, @var2, @var3; +-------+-------+-------+ | @var1 | @var2 | @var3 | +-------+-------+-------+ | a | 20 | 30 | +-------+-------+-------+
分析:
- 1、实参传入过程之后,实际上没有改变外部变量的值,而是把值给了形参,out类型不能接收外部变量的值,默认为null
- 2、当过程执行到end 的时候,如果是out或inout变量,会将形参的值重新赋值给实参变量
更多相关Mysql内容来自木庄网络博客
标签:Mysql
相关阅读 >>
mysql中优化和修复数据库工具mysqlcheck详细介绍
更多相关阅读请进入《mysql》频道 >>
数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。