MySql错误处理(二) - Condition & Handle
2011-04-01 11:46
260 查看
20.2.10.条件和处理程序
特定条件需要特定处理。这些条件可以联系到错误,以及子程序中的一般流程控制。
20.2.10.1.DECLARE条件
DECLAREcondition_nameCONDITIONFORcondition_value
condition_value:
SQLSTATE[VALUE]sqlstate_value
|mysql_error_code这个语句指定需要特殊处理的条件。它将一个名字和指定的错误条件关联起来。这个名字可以随后被用在DECLAREHANDLER语句中。请参阅
除了SQLSTATE值,也支持MySQL错误代码。
20.2.10.2.DECLARE处理程序
DECLAREhandler_typeHANDLERFORcondition_value[,...]sp_statement
handler_type:
CONTINUE
|EXIT
|UNDO
condition_value:
SQLSTATE[VALUE]sqlstate_value
|condition_name
|SQLWARNING
|NOTFOUND
|SQLEXCEPTION
|mysql_error_code这个语句指定每个可以处理一个或多个条件的处理程序。如果产生一个或多个条件,指定的语句被执行。
对一个CONTINUE处理程序,当前子程序的执行在执行处理程序语句之后继续。对于EXIT处理程序,当前BEGIN...END复合语句的执行被终止。UNDO处理程序类型语句还不被支持。
·SQLWARNING是对所有以01开头的SQLSTATE代码的速记。
·NOTFOUND是对所有以02开头的SQLSTATE代码的速记。
·SQLEXCEPTION是对所有没有被SQLWARNING或NOTFOUND捕获的SQLSTATE代码的速记。
除了SQLSTATE值,MySQL错误代码也不被支持。
例如:
mysql>CREATETABLEtest.t(s1int,primarykey(s1));
QueryOK,0rowsaffected(0.00sec)
mysql>delimiter//
mysql>CREATEPROCEDUREhandlerdemo()
->BEGIN
->DECLARECONTINUEHANDLERFORSQLSTATE'23000'SET@x2=1;
->SET@x=1;
->INSERTINTOtest.tVALUES(1);
->SET@x=2;
->INSERTINTOtest.tVALUES(1);
->SET@x=3;
->END;
->//
QueryOK,0rowsaffected(0.00sec)
mysql>CALLhandlerdemo()//
QueryOK,0rowsaffected(0.00sec)
mysql>SELECT@x//
+------+
|@x|
+------+
|3|
+------+
1rowinset(0.00sec)注意到,@x是3,这表明MySQL被执行到程序的末尾。如果DECLARECONTINUEHANDLERFORSQLSTATE'23000'SET@x2=1;这一行不在,第二个INSERT因PRIMARYKEY强制而失败之后,MySQL可能已经采取默认(EXIT)路径,并且SELECT@x可能已经返回2。
相关文章推荐
- MySql错误处理(二) - Condition & Handle
- MySql错误处理(二) - Condition & Handle
- Android NDK编译错误处理-- error: undefined reference to '__dso_handle'
- [MySQL] 存储过程错误异常处理例子 --> DECLARE EXIT HANDLER FOR SQLEXCEPTION
- PHP中的错误处理&自定义错误处理方法
- MySql错误处理(三)- 错误处理的例子
- c++构造函数中发生错误,如何处理? http://www.opengpu.org/forum.php?mod=viewthread&tid=2918
- C#使用checked关键字处理"溢出"错误
- MySQL的一次错误处理 SQL_SLAVE_SKIP_COUNTER
- MYSQL登录错误:mysqladmin: connect to server at 'localhost' failed
- MySql错误处理(四)- 错误代码和消息
- MySql存储过程—8、条件处理(Condition Handling) / 错误、异常处理
- MYSQL---Data too long for column 'sex' at row 1”错误处理办法
- Mysql 下载安装及链接错误处理
- MySQL存储过程中的错误处理 以及mybatis调用存储过程的例子
- 免安装版MySQL安装完成后登陆1045错误处理
- svn在ubuntu下Password for '(null)'错误处理
- MYSQL 存储过程异常处理 报错 错误代码: 1337
- mysql 中插入中文出现的 Incorrect string value: '\xE5\xA5\xBD\xE5\xAE\xB6...' from column错误
- 一个无法访问mysql的错误: ERROR 2003 (HY000): Can't connect to MySQL server on 'x.x.x.x' (111)