在编写存储过程时,有时会需要使用变量保存数据处理过程中的值。在 MySQL中时,可以在子程序中声明并使用,这些变量的作用范围是在BEGIN...END程序中,接下将针对变量的定义和赋值进行详细的讲解。
想要在存储过程中使用变量,首先需要定义变量。在存储过程中使用 DECLARE 语的定义变量,具体语法格式如下:
DEClARE var_name[,varname]...date_type[DERAULT valbe];
上述语法格式中,var_name 为局部变量的名称。DEFAULT value 子句给变量提供个默认值。该值除了可以被声明为一个常数之外,还可以被指定为一个表达式。如果有DEFAULT 子句,变量的初始值为 NULL.接下来定义一个名称为 myvariable 的变量,类型为INT 类型,默认值为 100,示例代码如下:
DECLARE myvariable INT DEFAULT 100;
定义变量之后,为变量赋值可以改变变量的默认值,MySQL 中使用 SET 语句为变量赋值,语法格式如下:
SET var_name=expr[,var_name=expr]...;
在存储过程中的 SET语句是一般 SET语句的扩展版本。被参考变量可能是子程序内声明的变量,或者是全局服务器变量,如系统变量或者用户变量。
在存储程序中的 SET语句作为预先存在的 SET 语法的一部分来实现。这允许SET a=x,b=y,……这样的扩展语法。其中不同的变量类型(局域声明变量及全局变量)可以被混合起来。这也允许把局部变量和一些只对系统变量有意义的选项合并起来。
接下来声明三个变量,分别为 var1、var2、var3,数据类型为 INT,使用 SET 为变量赋值,示例代码如下:
DECLARE varl,var2,var3 INT;
SER var1=10,var2=20;
SET var3=varl+var2;
除了可以使用 SET 语句为变量赋值外,MySQL 中还可以通过 SELECT…INTO 为一个或多个变量赋值,该语句可以把选定的列直接存储到对应位置的变量。使用SELECT.INTO 的具体语法格式如下:
SELECT col_name[...] INTO var_name[...] table_expr;
在上述语法格式中,col_name 表示字段名称;var_name 表示定义的变量名称;table_expr 表示查询条件表达式,包括表名称和 WHERE 子句。
例如,声明变量sgrade 和s_gender,通过 SELECT…INTO 语句查询指定记录并为变量赋值,具体代码如下:
DECLARE s_grade FLOAT;
DECLARE s_gender CHAR(2);
SELEcr grade, gender INTO s_grade,s_gender
FROM student WHERE name ='rose';
上述语句将 student 表中 name 为rose 的同学的成绩和性别分别存人到了变量s_grade 和 s_gender 中。