mysql 存储过程异常处理

原创 2016年06月02日 10:24:03

今天同事跟我说, mysql存储过程中 发生异常了,怎么把异常的相关信息记录到另外一张表中,

他说网上找了 ,基本上没找到相关资料


通过看官方文档 发现, 其实还是能够处理的, 我们可以分别定义异常 然后在做相应的处理


1、 首先看官方文档上的说明
 
 mysql> help declare handler
Name: 'DECLARE HANDLER'
Description:
Syntax:
DECLARE handler_action HANDLER
FOR condition_value [, condition_value] ...
statement

handler_action:
CONTINUE       --表示出现异常继续执行
| EXIT   -- 表示出现异常退出执行
| UNDO -- 不支持

condition_value:
mysql_error_code
| SQLSTATE [VALUE] sqlstate_value
| condition_name
| SQLWARNING
| NOT FOUND
| SQLEXCEPTION

The DECLARE ... HANDLER statement specifies a handler that deals with
one or more conditions. If one of these conditions occurs, the
specified statement executes. statement can be a simple statement such
as SET var_name = value, or a compound statement written using BEGIN
and END
(see [HELP BEGIN END]).


下面是举例 主键冲突的 例子,如果这个主键冲突 那么就把冲突的主键给记录下来

create table test_table(
			id int primary key, 
			name varchar(30), 
			password varchar(30)
			); 
	create table record_repeat(
			id int, 
			occ_time datetime default now()
			);		


 
 
delimiter //
 create  procedure test_conflict_data(inid int)
  begin
	declare t_id int;
	declare continue handler for SQLEXCEPTION 
	 begin 
	 insert into record_repeat(id) values(t_id); 
	 end;
   	set t_id=inid;
    insert into test_table(id) values(inid);
 end;
 //
delimiter ;


下面测试数据

mysql> call test_conflict_data(234234);
Query OK, 1 row affected (0.05 sec)

mysql> call test_conflict_data(234234);
Query OK, 1 row affected (0.05 sec)

mysql> call test_conflict_data(234236);
Query OK, 1 row affected (0.05 sec)

mysql> call test_conflict_data(234237);
Query OK, 1 row affected (0.03 sec)

mysql> call test_conflict_data(234237);
Query OK, 1 row affected (0.05 sec)
mysql> select * from  test_table;
+--------+------+----------+
| id     | name | password |
+--------+------+----------+
| 234234 | NULL | NULL     |
| 234236 | NULL | NULL     |
| 234237 | NULL | NULL     |
+--------+------+----------+
3 rows in set (0.00 sec)

mysql> select * from record_repeat;
+--------+---------------------+
| id     | occ_time            |
+--------+---------------------+
| 234234 | 2016-06-02 11:23:35 |
| 234237 | 2016-06-02 11:23:49 |
+--------+---------------------+
2 rows in set (0.00 sec)

mysql>


发生重复插入的数据 都 记录到 record_repeat  表中了


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

mysql存储过程之异常处理篇

mysql存储过程也提供了对异常处理的功能:通过定义HANDLER来完成异常声明的实现     语法如下: DECLARE handler_type HANDLER FOR c...

mysql存储过程之异常处理篇

mysql存储过程也提供了对异常处理的功能:通过定义HANDLER来完成异常声明的实现     语法如下: DECLARE handler_type HANDLER FOR c...

MySQL 存储过程的异常处理

[代码] SQL异常处理 view source print? 001 mysql> 002 mysql> delimi...

MySql存储过程的异常处理理论及实例

原文地址点击此处 MySql存储过程异常处理示例: 在网上查了好多资料,发现关于mysql的异常处理资料都是一些错误号列表,对于平时运行中,我们可能更多的希望能够记录准确的错误消息到日志中. ...

mysql存储过程异常处理

定义条件和处理程序是事先定义程序执行过程中可能遇到的问题。并且可以在处理程序中定义解决这些问题的办法。这种方式可以提前预测可能出现的问题,并提出解决办法。这样可以增强程序处理问题的能力,避免程序异常停...

MySql存储过程—8、条件处理(Condition Handling) / 错误、异常处理

在游标里面我们有简要的介绍了一个NOT FOUND这个条件处理(错误、异常处理)的情况,条件处理涉及到两个语句,一个是DECLARE...CONDITION,另一个是DECLARE....HANDLE...

存储过程的异常处理

 这部分,主要讲解一些简单的问题、异常处理器和条件。下面首先看几个简单的问题: 1、log of failures 错误日志 在INSERT失败时,希望将错误记录到日志文件中,以便需要时能查...

Oracle 存储过程异常处理

转载自:http://blog.csdn.net/jojo52013145/article/details/6585833 1、异常的优点        如果没有异常,在程序中,应当检查...

oracle 存储过程,游标、异常处理,集合使用入门详解

我们在进行pl/sql编程时打交道最多的就是存储过程了。存储过程的结构是非常的简单的,我们在这里除了学习存储过程的基本结构外,还会学习编写存储过程时相关的一些实用的知识。如:游标的处理,异常的处理,集...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)