问:何为异常?
答:程序在执行过程中有可能出错,运行时错误叫做异常。
默认情况下,当存储过程运行出错时,过程会立即终止,并打印系统错误消息。
,
实验环境:
mysql> use 网球 Reading table 方式、for completion  of table 以及column 名字 你还要turn off 却;能够feature 用get a quicker startup with a Database 改变了 mysql>, show 表+ - - - - - - - - - - - - - - - - - - - + |,Tables_in_TENNIS | + - - - - - - - - - - - - - - - - - - - + | |,COMMITTEE_MEMBERS  |,MATCHES ,,,,,,,,, | |,PENALTIES ,,,,,,, | |,PLAYERS ,,,,,,,,, | |,TEAMS ,,,,,,,,,,, | + - - - - - - - - - - - - - - - - - - - + 5,rows set 拷贝(0.00,sec)
因为前面的实验多数用此数据库,库表结构就不再赘述了。
,
例:创建过程,插入一个重复的2号球队
mysql> delimiter $ $ mysql>, create procedure  duplicate_teams (,,,,,out p_processed 短整型),,,,,,begin ,,,,,set p_processed=1,,,,,,,insert into  TEAMS 值(2,27岁的“第三”),,,,,,,set p_processed=2,,,,,→最终获得$ $ mysql>, delimiter ; mysql>, call duplicate_teams (@processed); ERROR 1062年,(23000):,Duplicate entry ' 2 ', for key 主要'mysql>, select @processed; + - - - - - - - - - - - - + | |,@processed  + - - - - - - - - - - - - + |,NULL ,,,,, | + - - - - - - - - - - - - +
解析:客户端调用存储过程,运行出错,打印错误信息,过程被终止,没有输出。
,
一、定义异常处理:
声明…处理程序语句:
通过条件的定义和处理,可以在定义过程中,针对可能遇到的问题,做出相应的处理步骤。(也就是定义一个异常处理程序,指定当过程某条语句出错时,相应的采取什么操作)
DECLARE handler_action 处理程序 ,,,FOR condition_value [, condition_value],… ,,,的声明 handler_action: ,,,CONTINUE ,,, |退出 condition_value: ,,,mysql_error_code ,,, |, SQLSTATE (价值),sqlstate_value ,,, |, condition_name ,,, |, SQLWARNING ,,, |, NOT FOUND ,,, |, SQLEXCEPTION
注意:声明……处理程序语句必须出现在变量或条件声明的后面。
当某个错误(condition_value)发生时——→执行指定的语句(声明——记录错误信息),执行完之后再决定如何操作(handler_action)。
1, handler_action
继续:继续执行当前的程序(接着执行出错的SQL语句的下一条语句);
退出:当前程序终止(退出当前声明所在的开始结束),
目前还不支持撤销功能。
2,声明
可以是单条语句或复合语句。
3, condition_value指明处理程序被何种条件触发,如果条件被触发,却没有处理程序被声明用于处理该条件,程序的进行将取决于条件类型。【顶】
,
,
二,单个异常处理程序
在输出参数中包含出错消息的SQLSTATE码。
例1:创建过程,插入一个重复的2号球队,继续
mysql> DELIMITER $ $ mysql>, CREATE , PROCEDURE small_mistake1 (, ,,,,,OUT error  VARCHAR (5)),, ,,,,,BEGIN ,,,,,DECLARE CONTINUE  HANDLER FOR  SQLSTATE “23000”, ,,,,,SET error =,‘23000’,,,,, #用来记录错误发生时的一些信息,,,,,,,,,,,,,,, ,,,,,select 误差;,,,,,,SET error =,‘00000’,,,,,,,select 误差;,,,,,,,,,INSERT INTO TEAMS 价值(“第三”2,27日);,,#会出错的语句,,,,,,,,,SET error =,”23001年,,,,,, ,,,,,结束$ $ mysql>, DELIMITER ; mysql>, call small_mistake1 (@a); + - - - - - - - + | |,error  + - - - - - - - + |,NULL | + - - - - - - - + + - - - - - - - + | |,error  + - - - - - - - + |,00000 | null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null nullMySQL存储过程的“异常处理”