`
gzcj
  • 浏览: 289760 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql 存储过程异常处理

阅读更多

当insert失败时,我希望将其记录在日志文件中,

      在这里需要创建一个主键表,以及一个外键表,我们使用的是Innodb ,因此外键关联检查是打开的,当我向外键表中插入
           非主键表中的值时,动作将会失败,创建的数据表如下:
    create table t2(s1 int primary key)engine=innodb;//
           create table t3(s1 int,
                      key(s1),
       foreign key (s1) references t2(s1))engine=innodb;//
    create table error_log(error_message char(80));//

1. 建立一个过程,第一个语句 DECLARE EXIT HANDLER是用来处理异常的,意思是如果错误 1216发生,这个程序将会在错误记录表中插入一行,
   EXIT的意思是 当动作成功提交后推出这个复合语句。
     create procedure p22(parameter int)
       begin
         
declare exit Handler for 1452
     insert into error_log values(concat('Time: ',current_date,'.Foreign key reference failure for value=',parameter));
          insert into t3 values(parameter);
       end;//

2. 申明异常处理的语法 DECLARE HANDLER syntax:
       DECLARE {EXIT|CONTINUE} HANDLER FOR {error_number|{SQLSTATE error-string}|condition} SQL Statement
   上面就是错误处理的用法,也就是一段当程序出错后自动触发的代码,MYSQL允许两种处理器,一种是exit处理,另外一种是 continue处理,与exit
   不同的是在于他执行后,原主程序仍然继续运行,那么该复合语句就没有出口了。

----continue处理的例子:
      create table t4(s1 int primary key);//
      create procedure p23()
       begin
         declare continue handler for SQLSTATE '23000' set @x2=1;
set @x=1;
insert into t4 values (1);
set @x=2;
insert into t4 values(1);
set @x=3;
         select @x, @x2;
       end;//
       call p23();//

---- rollback(回滚事务),定义自己的错误处理名字 declare '错误处理名' condition for SQLSTATE'23000';
      create procedure p24()
       begin
         declare ViolationSelf condition for SQLSTATE'23000';
DECLARE EXIT HANDLER for ViolationSelf rollback;
start transaction;
insert into t2 values(1);
         insert into t2 values(1);
commit;
       end;//

 

另一个例子

begin

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
SET @x = 1;
select * from test1;
set @x=2;
END;

if (@x != 2) then
insert into error(id, message) values(4,'error4');
end if;

end

 

例子

declare continue handler for not found,sqlexception set v_error=1;


  -- 异常处理
             if v_error=1 then
                insert into tmp_debug(spname,msg,vcount,vdate)
                values('sp_rename_table','ERROR:not found,sqlexception',i,now());
                leave error_label;
             end if;

例子

delimiter //

CREATE PROCEDURE TEST()
BEGIN
DECLARE exit HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND
begin
rollback;
insert into bb values('error');
end;
START TRANSACTION;
INSERT INTO aa VALUES (1);
INSERT INTO aa VALUES (2);
COMMIT;
END;
//

/******************************************** Cursor游标 **********************************************************/

游标实现功能的摘要: 声明游标, 打开游标,从游标里读取,关闭游标
      DECLARE cursor-name CURSOR FOR SELECT ······
      OPEN cursor-name;
      FETCH cursor-name INTO variable;
      CLOSE cursor-name;

1. create procedure p25(out return_val int)
    begin
      DECLARE a,b,c int;
      DECLARE cur_1 CURSOR for select s1 from t;
      DECLARE continue handler for not found set b=1;
       open cur_1;
       set c=0;
       repeat
         fetch cur_1 into a;
until b=1
       end repeat;
       close cur_1;
       set return_val=a;
    end;//

2.    create procedure p25_1(out return_val int)
    begin
      DECLARE a,b,c int;
      DECLARE cur_1 CURSOR for select s1 from t;
      DECLARE continue handler for not found set b=1;
       open cur_1;
       set c=0;
       lable_1:loop
         fetch cur_1 into a;
if b=1 then
           leave lable_1;
end if;
set c=c+1;
       end loop;
       close cur_1;
       set return_val=c;
    end;//

    create procedure p34(in va int)
    begin
       delete from t where s1=va;
    end;//

 

以上均还没有测试过。

 

分享到:
评论

相关推荐

    MySQL存储过程的异常处理方法

    本实例展示了如何在MySQL存储过程中实现异常处理,以捕获并处理可能出现的错误。 首先,我们注意到在创建存储过程`myProc`时,使用了`delimiter $$`来改变MySQL客户端的语句分隔符,这是为了在存储过程中使用多个...

    MySql存储过程异常处理示例代码分享

    MySQL存储过程异常处理是数据库开发中的重要组成部分,它允许开发者在遇到错误时进行优雅的控制流程,而不是让程序中断。在存储过程中,异常处理通常涉及捕获错误、记录错误信息,甚至在某些情况下,继续执行后续的...

    MySQL存储过程中一些基本的异常处理教程

    Mysql 支持异常处理,通过定义 CONTINUE/EXIT 异常处理的 HANDLER 来捕获 SQLWARNING/NOT FOUND/SQLEXCEPTION (警告 / 无数据 / 其他异常)。其中, FOR 后面可以改为 SQLWARNING, NOT FOUND, SQLEXCEPTION 来指示...

    MySQL定义异常和异常处理详解

    MySQL中的异常处理是数据库编程中不可或缺的一部分,它允许开发者预设对可能出现的错误或异常的响应,从而确保程序的稳定性和健壮性。在MySQL中,异常定义和处理主要是通过`DECLARE`语句来实现的。 1. **异常定义**...

    mysql存储过程教程

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列SQL语句并封装成一个可重复使用的单元,从而提高数据处理的效率和代码的复用性。本教程将深入探讨MySQL存储过程的创建、调用以及相关概念...

    MySQL存储过程编程.pdf

    MySQL 存储过程编程 MySQL 存储过程编程是指在 MySQL 数据库中使用存储过程来实现业务逻辑的编程技术。存储过程是一种可以在数据库中存储和执行的程序单元,它可以实现复杂的业务逻辑和数据处理操作。 在 MySQL ...

    [MySQL] 存储过程错误异常处理例子

    总结来说,`DECLARE EXIT HANDLER FOR SQLEXCEPTION`是MySQL存储过程中处理错误和异常的关键工具。它使得我们能够优雅地处理可能出现的问题,确保即使在异常情况下,程序也能按照预定的方式进行操作,从而提升整个...

    MySQL存储过程.pdf

    MySQL存储过程 MySQL存储过程(Stored Procedure)是一种复杂的数据库对象,允许用户将多个SQL语句组合成一个单一的执行单元,以提高数据库的性能和可维护性。下面是 MySQL 存储过程的相关知识点: 存储过程的定义...

    MySQL存储过程系统学习资料

    4. **异常处理**:MySQL的存储过程中可以使用`DECLARE`声明变量和`BEGIN...END`块来处理异常。`DECLARE HANDLER`用于定义当特定错误发生时的处理方式。 ```sql DECLARE v1 INT DEFAULT 0; DECLARE CONTINUE HANDLER...

    MySQL存储过程 MySQL存储过程

    - 在设计存储过程时,应考虑异常处理,确保当遇到错误时能够正确地处理。 - 避免在存储过程中使用过于复杂的逻辑,保持简洁易懂的设计。 - 定期检查和优化存储过程的性能,尤其是在负载较高的情况下。 - 使用适当的...

    MySQL存储过程 ERROR Handler 异常处理.doc

    MySQL存储过程中的ERROR Handler是用于异常处理的关键机制,它允许开发者在遇到错误时进行定制化的响应,而不是让整个过程崩溃。在存储过程中,错误处理通常涉及声明一个或多个HANDLER,这些HANDLER会在特定错误发生...

    MySQL存储过程经典教程

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一组SQL语句并封装成一个可重复使用的对象。这个经典教程旨在深入探讨存储过程的各个方面,帮助读者掌握这一强大的数据库编程工具。 1. **存储...

    精通MySQL存储过程和函数

    ### 精通MySQL存储过程和函数 #### 1. 说明 ##### 1.1 手册适用范围 本手册适用于对MySQL存储过程和函数感兴趣的开发者和技术人员,特别是那些希望深入了解并掌握如何在实际项目中高效利用这些功能的专业人士。...

    mysql存储过程中的异常处理解析

    MySQL存储过程中的异常处理是程序设计中的重要环节,它允许开发者在遇到错误或异常时能够进行适当的响应,而不是让程序崩溃。在MySQL中,异常处理主要是通过声明和使用HANDLER来实现的。以下是对这一主题的详细解释...

    玩转MySQL存储过程

    - **功能差异**:Oracle的存储过程支持更高级的功能,例如包和复杂的异常处理。 - **性能差异**:由于数据库引擎的不同,两者在执行存储过程时的性能也会有所不同。 **结论**:尽管如此,存储过程的核心理念——...

Global site tag (gtag.js) - Google Analytics