一、在存储过程中定义变量
1.定义变量
2.为变量赋值
①使用set关键词赋值
②使用SELECT…INTO语句为变量赋值
二、使用@创建用户变量
在存储过程和函数中,可以定义和使用变量。用户可以使用关键字DECLARE来定义变量,然后为变量赋值。这些变量的作用范围是在BEGIN…END程序段中。
在MySQL中,可以使用DECLARE关键字来定义变量。定义变量的基本语法如下:
DECLARE var_name[,…] type [DEFAULT value]
- 关键字DECLARE是用来声明变量的;
- 参数var_name是变量的名称,可以同时定义多个变量;
- 参数type用来指定变量的类型;
- DEFAULT value子句将变量默认值设置为value,没有使用DEFAULT子句时,默认值为NULL。
定义变量cid,数据类型为INT型,默认值为10,代码如下:
declare cid int default 10;
SET语句的基本语法如下:
SET var_name=expr[,var_name=expr]… #可以是确定值,也可以是表达式
- 关键字SET用来为变量赋值;
- 参数var_name是变量的名称;
- 参数expr是赋值表达式。一个SET语句可以同时为多个变量赋值,各个变量的赋值语句之间用逗号隔开。
例如,将变量temp_id赋值为88,代码如下:
set temp_id=88;
其基本语法如下:
SELECT col_name[,…] INTO var_name[,…] FROM table_name WHERE condition
- 参数col_name表示查询的字段名称;
- 参数var_name是变量的名称;
- 参数table_name指表的名称;
- 参数condition指查询条件。
在下面student表和class表创建存储过程proc_query_student, 要求输入学生id,返回学生所在班级以及班级人数:
delimiter $$ create procedure proc_query_student(in sid int,out cname varchar(64),out ccount int) begin declare temp_cid int; declare temp_cname varchar(64); declare temp_ccount int; select class_id into temp_cid from student where id=sid; select name,count into temp_cname,temp_ccount from class where id=temp_cid; set cname=temp_cname,ccount=temp_ccount; end; $$ mysql> delimiter ;
使用@关键字创建“用户变量”,“用户变量的作用范围”在整个当前对话中,其语法形式如下:
@ var_name;
例如创建“用户变量”调用上面的存储过程,并使用select语句查看变量:
call proc_query_student(3,@name,@count); select @name,@count;
查询结果: