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

MySQL存储过程当中的错误处理

做者:UncleToo  来源:翻译  日期:2014-05-20 7:53:13 
收藏  评论:( 2 )  阅读:1985sql

MySQL存储过程当中的错误处理

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

在本章MySQL教程中,咱们将学习如何在存储过程当中处理程序错误测试

 

声明处理程序spa

MySQL为咱们提供了一种简单的方法定义处理程序,咱们能够使用DECLARE HANDLER语句,以下所示:翻译

1code

DECLARE action HANDLER FOR condition_value statement;教程

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

action 能够是如下两种:开发

  • CONTINUE:继续执行当前代码块get

  • EXIT:退出当前代码块

condition_value 是一类特定的条件,能够使一下几种:

  • 一个MYSQL错误代码

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

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

 

MySQL错误处理的例子

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

1

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET has_error = 1;

 

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

1

2

3

4

5

DECLARE EXIT HANDLER FOR SQLEXCEPTION

BEGIN

ROLLBACK;

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

END;


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

1

DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_row_found = 1;

 

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

1

2

DECLARE CONTINUE HANDLER FOR 1062

Select '错误:重复键值';

 

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

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

1

2

3

4

5

Create TABLE article_tags(

    article_id INT,

    tag_id     INT,

    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_id INTIN tag_id INT)

BEGIN

    DECLARE CONTINUE HANDLER FOR 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

相关文章
相关标签/搜索