mysql储存过程 错误信息_mysql 存储过程 获取错误信息 继续执行

MySQL存储过程中的错误处理

作者:UncleToo  来源:翻译  日期:2014-05-20 7:53:13

收藏  评论:( 2 )  阅读:1985

2014052028422293.jpg

当MySQL执行存储过程遇到错误时,适当处理它,如继续执行或退出当前代码段,并返回有意义的错误提示是很重要的。一方面提高程序的容错能力,另一方便当程序出错时,开发人员也能准确定位错误的地方。

声明处理程序

MySQL为我们提供了一种简单的方法定义处理程序,我们可以使用DECLARE HANDLER语句,如下所示:

1

DECLARE action HANDLERFOR condition_value statement;

如果其值与condition_value匹配,MySQL将执行statement,并且根据action值选择继续或退出当前代码块。

action 可以是以下两种:

CONTINUE:继续执行当前代码块

EXIT:退出当前代码块

condition_value 是一类特定的条件,可以使一下几种:

一个MYSQL错误代码

一个标准的SQLSTATE值,如SQLWARNING,NOTFOUND ,SQLEXCEPTION等

statement 是一个语句块,从BEGIN开始,到END结束。它可以是一个简单的sql语句,也可以是很复杂的逻辑语句。

MySQL错误处理的例子

例1:当程序发生错误,将has_error值置为1。如:

1

DECLARE CONTINUE HANDLERFOR SQLEXCEPTIONSET has_error = 1;

例2:当遇到错误时,程序将回滚之前的操作,同时给出错误提示,然后退出当前程序块。如:

1

2

3

4

5

DECLARE EXIT HANDLERFOR SQLEXCEPTION

BEGIN

ROLLBACK;

Select '发生错误,执行将被回滚,程序将终止执行';

END;

例3:对于游标或select into操作,如果出现找不到记录的情况,将no_row_found赋值为1。如:

1

DECLARE CONTINUE HANDLERFOR NOT FOUNDSET no_row_found = 1;

例4:如果出现重复键值,MySQL会给出1062的错误,将给出错误提示,程序继续运行。如:

1

2

DECLARE CONTINUE HANDLERFOR 1062

Select '错误:重复键值';

在存储过程中MySQL的处理程序的例子

首先我们创建一张数据表,为测试所用。

1

2

3

4

5

Create TABLE article_tags(

article_idINT,

tag_idINT,

PRIMARY KEY(article_id,tag_id)

);

article_tags表用来存储文章及标签之间的关系(多对多)。article_id存储文章ID,tag_id存储标签ID

其次,我们创建一个存储过程,实现插入文章ID和标签ID。

1

2

3

4

5

6

7

8

9

10

11

DELIMITER $$

Create PROCEDURE insert_article_tags(IN article_idINT,IN tag_idINT)

BEGIN

DECLARE CONTINUE HANDLERFOR 1062

Select CONCAT('错误:重复键值 (',article_id,',',tag_id,')')AS msg;

-- 插入新的记录

Insert INTO article_tags(article_id,tag_id)

VALUES(article_id,tag_id);

-- 返回标签数量

Select COUNT(*)FROM article_tags;

END

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值