c mysql异常处理_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)

begindeclare 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;//

以上均还没有测试过。

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2010-07-02 20:26

浏览 7850

分类:数据库

评论

Claude Code、Codex、Gemini CLI、OpenCode 和 OpenClaw 配置管理太麻烦?试试这个统一管理工具 还在为 Claude Code、Codex、Gemini CLI 等 AI CLI 配置烦恼?🤯 这款桌面工具支持五大助手统一管理,一键切换 50+ 服务商,MCP 和 Skills 集中管理 🛠️,跨平台支持,让你的 AI 编程更高效 ⚡ 阅读详情

相关推荐

RK3588 实战级 YOLOv5 Android 全解析:NPU 量化 + 多线程 + 跟踪算法,源码一次买齐

本文将带你完成一个完整的AI视觉项目:在搭载RK3588芯片的Android开发板上运行实时目标检测与跟踪应用。实战目标:成功运行官方YOLOV5摄像头实时检测案例技术深度:深入理解RKNN开发框架和源码实现核心技能:掌握NPU推理、多线程并发、目标跟踪等关键技术。

FJN110的博客 134

mysql异常处理得不到异常信息_异常处理 · MySQL5.7文档 · 看云

## 定义条件作用 : 特定条件需要特定处理,这些条件可以联系到错误,以及子程序中的一般流程控制.定义条件是事先定义程序执行过程中遇到的问题,处理程序定义了在遇到这些问题时应当采取的处理方式,并且保证存储过程或函数在遇到警告或错误时才能继续执行.这样可以增强存储过程程序处理问题的能力,避免程序异常停止运行.```sqldeclare 条件的名称 condition for [条件的类型...];`...

weixin_27076351的博客 301

2. Android_逆向的历史与发展

学完本节,希望你能够:了解 Android 逆向工程的发展历程,从早期 APK 破解到现代应用保护;入门先把这几类「在干啥」搞清楚,后面学脱壳、反反调试会顺很多。(反编译 APK 得到的类汇编代码,相当于程序的「菜谱」)就能绕过验证,到后来混淆、加固、反调试一起上,逆向难度越来越高。(第三节 什么是 CPU 指令集),帮你搞清楚「反汇编看到的那些指令」是从哪来的、和 Android 逆向有啥关系。有必要——先搞清「没加固时怎么玩」,再学脱壳和对抗,思路才顺。读起来费劲,但逻辑还在,耐心一点还能跟。

长沙火山 1363

mysql异常处理

针对存储过程 、触发器或函数内部语句可能发生的错误或警告信息,需要进行相关异常或称 例外的捕捉,然后作出相应的处理,异常处理的方式如下: DECLARE {CONTINUE | EXIT} HANDLER FOR {SQLSTATE sqlstate_code| MySQL error code| condition_name} handler_actions 说明: · Handler

seteor的专栏 1万+

存储过程异常

存储过程 异常 EXCEPTION DIAGNOSTIC

sinat_34914869的博客 1424

编程语言 Mysql系列(十一)异常处理

编程语言 Mysql系列(十一)异常处理 Mysql系列(十一)异常处理 DROP PROCEDURE IF EXISTS `SP_MODEL`; DELIMITER ;; CREATE PROCEDURE `SP_MODEL`(IN V_TYPE INT) BEGIN /**********存储过程模版,结合了·返回自定义错误信息·错误退出··事物回滚·的功能***********/ DECLARE V_TEST INT DEFAULT 0; DECLARE V_ERR_NO INT DEFAU

423

DB2 存储过程异常处理器类型有几种?

以下的文章主要向大家讲述的是DB2 存储过程异常处理方法,在DB2数据库中,假如你要使用sqlcode,那么你就必须在DDL语句之前declare。这是我们大家都必须了解的,以下就是文章的主要内容描述。 存储过程异常的处理: DECLARE handler-type HANDLER FOR condition handler-action   异常

左脚小提琴的专栏 2556

c mysql异常捕获异常处理_MySQL存储过程异常处理方法

mysql>mysql> delimiter $$mysql>mysql> CREATE PROCEDURE myProc-> (p_first_name VARCHAR(30),-> p_last_name VARCHAR(30),-> p_city VARCHAR(30),-> p_descr...

weixin_42511832的博客 110

c mysql异常捕获异常_mysql存储过程中的异常处理解析

定义异常捕获类型及处理方法:DECLARE handler_action HANDLERFOR condition_value [, condition_value] ...statementhandler_action:CONTINUE| EXIT| UNDOcondition_value:mysql_error_code| SQLSTATE [VALUE] sqlstate_value| co...

weixin_34598113的博客 204

OverIQ 中文系列教程(二十四)

存储过程只是一组组合在一起并给定名称的 SQL 语句。存储过程用于希望多次执行同一组语句的情况。我们使用语句创建存储过程存储过程也可以接受参数。一旦存储过程被创建,我们可以使用CALL语句调用它,该语句后跟过程名,后跟括号内的参数(如果有)。这里有一个简单的存储过程,它接受一个大陆并返回其中国家的名称。mysql>-> (-> )-> BEGIN-> END //mysql>请注意,在前面的代码片段中,con参数前面是IN关键字,因此它是一个输入参数。

龙哥盟 1245

MySQL】——存储过程

🎯程序设计基础 🎃变量 🎃流程控制语句 🎃光标 🎃异常处理(条件处理) 🎯存储过程概述 🎃存储过程基本概念 🎃存储过程的类型 🎃存储过程的作用 🎯创建和执行存储过程 🎃创建和执行存储过程 🎃创建和执行带输入参数的存储过程 🎃创建和执行带输出参数的存储过程 🎯管理存储过程 🎃查看存储过程 🎃修改存储过程 🎃删除存储过程 🎯存储函数 🎃存储过程与存储函数联系与区别

shsjssnn的博客 2975

深入解析MySQL(6)——存储过程、游标与触发器

存储过程是一组预编译的SQL语句集合,存储在数据库中,可通过名称调用。支持条件判断、循环等逻辑控制,适合封装复杂业务逻辑在MySQL中,等数据库对象的信息可以通过中的系统视图查询。这个视图包含所有数据库中的存储过程和函数的元数据信息。

2401_89167985的博客 7094

MySQL数据库】存储过程与自定义函数(含: SQL变量、分支语句、循环语句 和 游标、异常处理 等内容)

本文主讲:存储过程、自定义函数;SQL中变量的定义、使用;分支语句、循环语句; 游标、异常处理:错误处理(句柄机制) 等

Stark的博客 1588

mysql 存储过程 实例_mysql存储过程案例解析

mysql存储过程案例解析DROP PROCEDURE IF EXISTS `P_CreateID`;DELIMITER $$CREATE DEFINER=`root`@`localhost` PROCEDURE `P_CreateID`(in tablenames VARCHAR(50) ,out BH VARCHAR(40))BEGINdeclare _time int;DECLARE _...

weixin_42552410的博客 368

C mysql带参数存储过程_C# 调用Mysql 带参数存储过程

使用C#调用Mysql 带参数的存储过程:1、创建带参数的存储过程:USP_Temp_Test2、两个参数:IN 参数为 P_XML, OUT 参数为 P_ErrorOut3、C#代码调用该存储过程注意:在使用C#调用MySQL 存储过程时,需要指定命令类型 CommandType.StoredProcedure,否则会出现没有赋值的错误MySqlParameter[] para = new M...

weixin_39792747的博客 678

mysql exit handler_declare handler 声明异常处理的语法

声明异常处理的语法DECLARE{EXIT | CONTINUE}HANDLER FOR{error-number | SQLSTATE error-string | condition}SQL statement上述定义包括:Handler Type (CONTINUE,EXIT)//处理类型 继续或退出Handler condition (SQLSTATE,MYSQL ERROR,CONDIT...

weixin_33054119的博客 1984

mysql捕捉异常

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,NOT FOUND,SQLWARNING SET flag=500; 1、遇到异常时有continue(继续执行)和exit(退出)两种; 2、捕捉的异常 (1)捕捉单个异常如'23000'duplicate重复主键异常; (2)某一类异常SQLWARNING:以01开头的异常代码;NOT FOUND

Bennett2251的博客 1079

玩转Mysql系列 - 第20篇:异常捕获及处理详解

Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能。欢迎大家加我微信itsoku一起交流java、算法、数据库相关技术。这是Mysql系列第...

路人甲Java 1744

declare handler 声明异常处理的语法

声明异常处理的语法 DECLARE {EXIT | CONTINUE} HANDLER FOR {error-number | SQLSTATE error-string | condition} SQL statement 上述定义包括: Handler Type (CONTINUE,EXIT)//处理类型 继续或退出 Handler condition (SQLSTAT...

weixin_30702413的博客 1035

【官方原版翻译】DECLARE ... HANDLER语法

本文仅适用于MySQL 5.7 DECLARE handler_action HANDLER FOR condition_value [, condition_value ] ... statement handler_action : CONTINUE | EXIT | UNDO condition_value : mysql_...

良心有约 2104

MySql错误处理-错误处理的例子

有几种错误处理的声明形式:  § 如果任何错误(不是 NOT FOUND ) , 设置 l_error 为 1 后继续执行:  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION  SET l_error=1;  § 如果发生任何错误(不是 NOT FOUND), 执行 ROLLBACK和产生一条错误消息后退出当前块或存储过程。  DECLARE EXIT

Jerry的一亩三分地 5870

全国省、市、区县,这个不是json,已经整理成表格了,可读性高,可以直接入库

全国区县帮你整理好了,可以放心下载,截止2025年3月的数据。包含字段有:id,citycode,adcode,name,经纬度,级别,parent_adcode, parent_name。表都设计好,可以直接用。

高教智简园区网络部署最佳实践(集中式VXLAN网关,随板AC,VXLAN到汇聚)

高教智简园区网络部署最佳实践(集中式VXLAN网关,随板AC,VXLAN到汇聚)

上一篇: mysql 存储过程耗时_MYSQL存储过程结合任务处理耗时操作
下一篇: mysql上上月消与上月消费_MySQL日期操作(本月,上月时间)
筹朩无双
博客等级 码龄8年 27粉丝 80原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值