MySql存储过程—8、条件处理(Condition Handling) / 错误、异常处理
在游标里面我们有简要的介绍了一个NOT FOUND这个条件处理(错误、异常处理)的情况,条件处理涉及到两个语句,一个是DECLARE...CONDITION,另一个是DECLARE....HANDLER。在游标的例子中是使用了一个DECLARE....HANDLER。先来看看DECLARE....HANDLER。
1、DECLARE....HANDLER语句
这个语句用于但数据库出现某种情况的时候(condition,大部分指发生某种错误时),来定义具体的处理办法(handler);所以这里涉及到包括:a、就是个什么情况 b、如何处理它;下面是其格式
测试比较简单,这里我们数据库里面本身就有记录了,然后在Qurey browser中先输入
SET @x = 0;
然后调用存储过程下面是结果:
通过结果我们知道出现了两次插入的记录同原有的记录出现主键重复的情况。当然这个是由下面这个代码触发的。
INSERT INTO products values(1,default,default,default,default,default);
2、DECLARE...CONDITION语句
这个语句其实是为了让我们的错误条件更加的清晰明了化的,对于上面的情况,像SQLSTATE '23000'这种表示是一种很不直观的方法,要通过相应的文档去对应,阅读起来比较不方便。而DECLARE....CONDITION可以对条件定义相对应的名称,看个例子就清楚了:
DECLARE duplicate_key CONDITION FOR SQLSTATE '23000';DECLARE CONTINUE HANDLER FOR duplicate_key BEGIN -- body of handler END;当然在上面的例子我们没有用到BEGIN....END,我们只有一行SET @x=@x+1;这里我们用duplicate_key这个条件名称来对应到SQLSTATE '23000'上面,这样查看起来更加的直观。这你duplicate_key就是我们上面介绍DECLARE....HANDLER时候的那个condition_name。