文档章节

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

 小田天
发布于 2016/07/14 17:24
字数 688
阅读 13
收藏 0
点赞 0
评论 0

MySQL存储过程中的错误处理

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

MySQL存储过程中的错误处理

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

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

 

声明处理程序

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

1

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

© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 79
码字总数 49841
作品 0
怀化
九、MySQL存储过程和函数

存储过程就是一条或者多条SQL语句的集合,可视为批文件,但是其作用不仅限于批处理。 9.1、创建存储过程和函数 存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别是...

运维菜鸟丶
2017/08/04
0
0
MySQL存储过程的“异常处理”

Q:何为异常? A:程序在执行过程中有可能出错,运行时错误叫做异常。 默认情况下,当存储过程运行出错时,过程会立即终止,并打印系统错误消息。 实验环境: mysql> use TENNISReading tab...

zsdnr
2017/07/21
0
0
【原创】MySQL 5.7 SYS系统SCHEMA

在说明系统数据库之前,先来看下MySQL在数据字典方面的演变历史: MySQL4.1 提供了information_schema 数据字典。从此可以很简单的用SQL语句来检索需要的系统元数据了。 MySQL5.5 提供了per...

david_yeung
2015/11/25
0
0
【原创】mysql 错误缓冲堆栈

什么是错误缓冲堆栈呢? 举个很简单的例子,比如执行下面一条语句: mysql> INSERT INTO t_datetime VALUES(2,'4','5');ERROR 1292 (22007): Incorrect datetime value: '4' for column 'lo......

david_yeung
2015/12/25
0
0
MySQL存储过程的“异常处理”

实验环境: mysql> use TENNIS Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed m......

xmgdc
2017/07/03
0
0
小题大做之MySQL 5.0存储过程编程入门

MySQL 版本:5.0.45 phpMyAdmin版本:2.11.3 首先看MySQL 5.0参考手册中关于创建存储过程的语法说明: CREATE [DEFINER = { | CURRENT_USER }] PROCEDURE ([[,...]]) [ ...] : [ IN | OUT |......

胡晅晖
2011/10/11
0
0
存储过程从定义开始

使用存储过程的优点有: (1)存储过程在服务器端运行,执行速度快。 (2)存储过程执行一次后,其执行规划就驻留在高速缓冲存储器,在以后的操作中,只需从高速缓冲存储器中调用已编译好的二...

leon_tan
2015/11/30
297
0
Sun发布MySQL 5.4 响应速度提升90% ??真的假的?

Sun在第七届MySQL展会上发布了其最新版开源数据库MySQL 5.4的技术预览版本,MySQL 5.4在性能和可伸缩性上进行了重大改进。 MySQL 5.4支持InnoDB存储引擎扩展至16路x86服务器和64路CMT服务器,...

红薯
2009/04/24
465
0
mysql 存储过程入门实例 执行

第一步,当然是写个Hello Word的存储过程,如下: CREATE PROCEDURE phelloword() BEGIN SELECT 'Hello Word!' AS F; END; 将上面创建phelloword存储过程的语句拷到phpMyAdmin中执行,报如下...

Inszt
2015/10/09
112
0
mysql存储过程整理

1、存储过程的简介: 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用...

世界和平维护者
2016/10/16
26
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java IO类库之ObjectInputStream和ObjectOutPutStream

一、ObjectOutputStream 1 - ObjectOuputStream介绍 ObjectOutputStream(对象字节输出流),用于将一个序列化对象写入到创建ObjectOutputStream时传入的底层字节输入流中,通过源码可知该类继...

老韭菜
12分钟前
0
0
17.TCP:传输控制协议

介绍 TCP和UDP使用同一网络层(IP),但TCP提供了面向连接、可靠的传输层服务 TCP传输给IP层的信息单位称为报文段或段 TCP通过如下方式保证可靠性: 应用数据被分割成TCP认为最合适发送的数据...

loda0128
22分钟前
0
0
重装Oracle时出现environment variable "PATH"错误的解决办法

在win7 64位下重新安装oracle 11g,一直报environment variable "PATH"的错误,按说明将path里多余的路径删除,但没办法解决。选择忽略错误继续安装,装一半会报CRC错误,还是安装失败。最好...

良言
27分钟前
0
0
TensorFlow 全连接的mnist

全连接的mnist import tensorflow as tf# 导入 MINST 数据集from tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets("MNIST_data/", one_ho......

阿豪boy
27分钟前
0
0
JAVA 三种WebService 规范

JAVA 中共有三种WebService 规范,分别是JAX-WS(JAX-RPC)、JAXM&SAAJ、JAX-RS。 1. Jaxws(掌握) JAX-WS 的全称为 Java API for XML-Based Webservices ,早期的基于SOAP 的JAVA 的Web 服务...

onedotdot
46分钟前
0
0
将博客搬至CSDN

将博客搬至CSDN

xpbob
47分钟前
1
0
Aidl进程间通信详细介绍

目录介绍 1.问题答疑 2.Aidl相关属性介绍 2.1 AIDL所支持的数据类型 2.2 服务端和客户端 2.3 AIDL的基本概念 3.实际开发中案例操作 3.1 aidl通信业务需求 3.2 操作步骤伪代码 3.3 服务端操作...

潇湘剑雨
今天
0
0
python爬虫日志(3)下载图片

import urlliburl='https://xxx.jpg'#图片地址res=urllib.request.urlopen(url)#此函数用于对url的访问data=res.read() #字节流with open(r'D:\1.jpg',"wb") as code: c...

茫羽行
今天
0
0
vue中$emit的用法

1、父组件可以使用 props 把数据传给子组件。 2、子组件可以使用 $emit 触发父组件的自定义事件。 vm.$emit( event, arg ) //触发当前实例上的事件 vm.$on( event, fn );//监听event事件后运...

JamesView
今天
0
0
bash审计系统搭建

step1:使用saltstack工具bash部署>>>>>> # salt -N clienta state.sls audit step2:安装elasticsearch>>>>>> 注意: 1.不能以root用户进行启动,需要创建用户,并对解压的elasticsearch目录赋......

硅谷课堂
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部