实际开发中,经常需要对特定的条件进行处理,这些条件可以联系到错误以及子程序中的一般流程控制。定义条件是事先定义程序执行过程中遇到的问题,处理程序定义了在遇到这些问题时应当采取的处理方式,并且保证存储过程在遇到警告或者错误时能继续执行。
1. 定义条件
DECLARE condition_name CONDITION FOR condition_type;
condition_type 有两种形式
● SQLSTATE VALUES sqlstate_value
● mysql_error_code
1049 -- sqlstate_value
42000 -- mysql_error_code
2. 定义处理程序
DECLARE handler_type HANDLER FOR condition_value... sp_statement (接下来的处理程序)
handler_type : ● CONTINUE 遇到错误不处理,继续执行
● EXIT 遇到错误马上退出
● UNDO 遇到错误撤回之前的操作,MySQL暂时不支持这个操作
condition_value: ● SQLSTATE[VALUE] 包含5个字符的字符串错误值
● condition_name 表示DELCLARE CONDITION 定义的错误条件名称
● SQLWARNING 匹配所有以01开头的 SQLSTATE 错误代码
● NOT FOUND 匹配所有以02开头的SQLSTATE错误代码
● SQLEXCEPTION 匹配所有没有被SQLWARNING或NOT FOUND 捕获的 SQLSTATE错误代码
● mysql_error_code 匹配数值类型错误代码
3. 光标的使用
如何从一堆结果中找出自己想要的数据
○ 光标的声明
DECLARE cursor_name CURSOR FOR select_statement
○ 光标的使用
OPEN cursor_name; -- 光标默认指向表头
○ 取出数据
FETCH cursor_name INTO var_name... -- 这里的变量需要在光标之前就定义好
○ 关闭光标
CLOSE cursor_name