局部变量必须在存储过程体的开头处声明。
局部变量的作用范围仅限于声明它的begin..end语句块,其他语句块中的语句不可以使用它。
局部变量不同于用户变量,两者区别:局部变量声明时,在其前面没有使用@符号,并且它只能在begin..end语句块中使用;而用户变量在声明时,会在其名称前面使用@符号,同时已声明的用户变量存在于整个会话之中。
2、set语句
使用set语句为局部变量赋值
Set var_name=expr
Set cid=910;
3、select … into 语句
把选定列的值直接存储到局部变量中,语法格式
| Select col_name[,…] into var_name[,…] table_expr Col_name:用于指定列名 Var_name:用于指定要赋值的变量名 Table_expr:表示select语句中的from字句及后面的语法部分 |
说明:存储过程体中的select…into语句返回的结果集只能有一行数据。
4、定义处理程序
是事先定义程序执行过程中可能遇到的问题。并且可以在处理程序中定义解决这些问题的办法。这种方式可以提前预测可能出现的问题,并提出解决方法。
| DECLARE handler_type HANDLER FOR condition_value[,…] sp_statement handler_type:CONTINUE | EXIT | UNDO Condition_value:Sqlwarning | not found | sqlexception |
5、流程控制语句
(1)条件判断语句
If语句
| If search_condition then statement_list [elseif search_condition then statement_list]… [else statement_list] End if |
Search_condition参数:条件判断语句
Statement_list参数:不同条件的执行语句
多重IF的存储过程实例
数据准备
学生表:
| CREATE TABLE t_student ( STU_ID INT NOT NULL, STU_NAME CHAR(10) NOT NULL, STU_CLASS INT NOT NULL, STU_SEX CHAR(2) NOT NULL, STU_AGE INT NOT NULL, PRIMARY KEY (STU_ID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
数据如下:

成绩表(STU_ID是学生表是外键关系):
| CREATE TABLE t_grade ( STU_ID INT NOT NULL, STU_SCORE INT NOT NULL, FOREIGN KEY (STU_ID) REFERENCES t_student (STU_ID), INDEX STU_ID (STU_ID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |

然后写一个存储过程:返回各个分数等级的人










