Atitit mysql 存储过程捕获所有异常,以及日志记录异常信息
Atitit mysql 存储过程捕获所有异常,以及日志记录异常信息
1.1. 异常的处理模式exit continue undo模式 1
1.2. 捕获所有异常使用 DECLARE continue HANDLER FOR sqlexception 1
1.3. 捕获特定异常使用HANDLER FOR errorcode 2
1.4. 记录异常到日志表,获取异常代码和异常信息 2
1.5. 抛出自定义异常 3
2. 程序语言中捕获sql自定义抛出的异常 3
2.1. 代码 3
3. 集合的循环loop while repeat模式 4
3.1. 对集合的循环 使用loop模式最简单,while和repeat都麻烦店。loop模式会自动处理集合结束。 4
3.2. While模式循环集合 。。需要定义一个 CONTINUE HANDLER FOR NOT FOUND 4
3.3. 参考资料 5
1.1. 异常的处理模式exit continue undo模式
默认情况下,mysql异常机制是exit模式,出错直接退出。。
当当我们对一个集合循环做处理的时候,需要捕获异常,记录日志,继续执行。
1.2. 捕获所有异常使用 DECLARE continue HANDLER FOR sqlexception
相比js这一类语言的异常捕获,sql的异常捕获比较粗糙,只能捕获一个sp内的异常,不能精确到某几个代码行。。。
BEGIN
#Routine body goes here...
DECLARE a varchar(102) ; DECLARE code varchar(102) ; DECLARE msg varchar(102) ;
DECLARE b varchar(100) ; DECLARE n int ;
##catch
DECLARE continue HANDLER FOR sqlexception
cat1:BEGIN
GET DIAGNOSTICS CONDITION 1
code = RETURNED_SQLSTATE, msg = MESSAGE_TEXT;
SELECT code,msg;
#exit ALL
#leave cat1;
END;
set n=1;
# while n<5 do
lable:LOOP
call exThrow();
set n=n+1;
select 'in loop';
if n>3 THEN
select ' n>3 ';
leave lable;
end if;
#end while;
end loop;
END
1.3. 捕获特定异常使用HANDLER FOR errorcode
1.4. 记录异常到日志表,获取异常代码和异常信息
GET DIAGNOSTICS CONDITION 1
code = RETURNED_SQLSTATE, msg = MESSAGE_TEXT;
SELECT code,msg;
1.5. 抛出自定义异常
#Routine body goes here...
SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = "extag_1";
2. 程序语言中捕获sql自定义抛出的异常
2.1. 代码
BEGIN
#Routine body goes here...
SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = "extag_1";
END
{
"@type":"java.lang.RuntimeException",
"cause":{
"@type":"java.sql.SQLException",
"errorCode":1644,
"localizedMessage":"extag_1 Query: call exThrow Parameters: []",
"message":"extag_1 Query: call exThrow Parameters: []",
"nextException":{
"errorCode":1644,
"localizedMessage":"extag_1",
"message":"extag_1",
"sQLState":"HY000",
"sQLState":"HY000",
"stackTrace":[{
"localizedMessage":"java.sql.SQLException: extag_1 Query: call exThrow Parameters: []",
"message":"java.sql.SQLException: extag_1 Query: call exThrow Parameters: []",
"stackTrace":[{
3. 集合的循环loop while repeat模式
3.1. 对集合的循环 使用loop模式最简单,while和repeat都麻烦店。loop模式会自动处理集合结束。
BEGIN
#Routine body goes here...
DECLARE a varchar(102) ;
DECLARE b varchar(100) ; DECLARE n int ; DECLARE rs_finished int ;
DECLARE cursor_name CURSOR FOR select id,identity from system_passport order by id desc limit 3;
OPEN cursor_name;
lable:LOOP
fetch cursor_name into a,b;
select a,b;
end LOOP;
END
3.2. While模式循环集合 。。需要定义一个 CONTINUE HANDLER FOR NOT FOUND
BEGIN
#Routine body goes here...
DECLARE a varchar(102) ;
DECLARE b varchar(100) ; DECLARE n int ; DECLARE rs_finished int ;
DECLARE cursor_name CURSOR FOR select id,identity from system_passport order by id desc limit 5;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET rs_finished=1;
#set rs_finished=0;
set n=1;select 'open cursor bef';
OPEN cursor_name;
select 'open cursor after';
fetch cursor_name into a,b;
select a,b;
select rs_finished; # is null
while rs_finished is null do
select a,b;
fetch cursor_name into a,b;
end while;
END
3.3. 参考资料
GET DIAGNOSTIC 语句 - 千里之行始于足下 - 博客频道 - CSDN.NET.html
Atitit mysql数据库自定义异常在java里面的捕获与处理推荐标准与规范
作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher
捕鸟王"Bird Catcher kok 虔诚者Pious 宗教信仰捍卫者 Defender Of the Faith. 卡拉卡拉红斗篷 Caracalla red cloak 万兽之王
简称:: Emir Attilax Akbar 埃米尔 阿提拉克斯 阿克巴
全名::Emir Attilax Akbar bin Mahmud bin attila bin Solomon bin adam Al Rapanui 埃米尔 阿提拉克斯 阿克巴 本 马哈茂德 本 阿提拉 本 所罗门 本亚当 阿尔 拉帕努伊
常用名:艾提拉(艾龙), EMAIL:1466519819@qq.com
头衔:uke总部o2o负责人,全球网格化项目创始人,
uke交友协会会长 uke捕猎协会会长 Emir Uke部落首席大酋长,
uke宗教与文化融合事务部部长, uke宗教改革委员会副主席
uke制度与重大会议委员会委员长,uke保安部首席大队长,uke制度检查委员会副会长,
uke 首席cto 软件部门总监 技术部副总监 研发部门总监主管 产品部副经理 项目部副经理 uke科技研究院院长 uke软件培训大师
uke波利尼西亚区大区连锁负责人 汤加王国区域负责人 uke克尔格伦群岛区连锁负责人,莱恩群岛区连锁负责人,uke布维岛和南乔治亚和南桑威奇群岛大区连锁负责人
Uke软件标准化协会理事长理事长 Uke 数据库与存储标准化协会副会长
uke终身教育学校副校长 Uke医院 与医学院方面的创始人
uec学院校长, uecip图像处理机器视觉专业系主任 uke文档检索专业系主任
Uke图像处理与机器视觉学院首席院长
Uke 户外运动协会理事长 度假村首席大村长 uke出版社编辑总编
转载请注明来源:attilax的专栏 http://blog.csdn.net/attilax
http://www.cnblogs.com/attilax/
--Atiend v9
Atitit mysql 存储过程捕获所有异常,以及日志记录异常信息的更多相关文章
- Atitit mysql存储过程编写指南
Atitit mysql存储过程编写指南 1.1. 设定参数与返回值 `obj_id` int ,,返回类型 varchar(200)1 1.2. 在语句中使用传入的obj_id参数1 1.3. 测 ...
- 第三节:使用Log4net和过滤器记录异常信息,返回异常给前端
上次面试,遇到,在项目中如何处理业务异常和代码异常,使用txt记录异常信息后,如何直接区分出异常的类型,异常怎么分类处理,希望大家能帮我提出宝贵的意见,完善处理异常, 统一返回参数 public cl ...
- mysql 执行计划和慢日志记录
一.执行计划 1.作用预估sql语句执行的时间,一般准确2.格式: explain sql语句3.type类型的快慢(all最慢,const最快)all < index < range & ...
- java异常处理 日志记录异常具体位置的方法
首先要在方法处抛出 Exception异常 然后在方法调用处try catch接收此异常对象 这样就能够记录异常具体位置了 控制台输出: 日志: 要点: System.getProperty(&quo ...
- Log4Net在MVC下的配置以及运用线程队列记录异常信息
Log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件.数据库.EventLog等),日志就是程序的黑匣子,可以通过日志查看系统的运行过程,从而发现系统的问题.日志的作用:将运 ...
- 对MYSQL慢查询slow query 日志记录内容的疑惑
初始:由于新装服务器出现CPU占用过高,响应不及时的问题排查,因为环境基于最基础的LAMP构架 想到开启 MYSQL slow_query_log 慢查询日志做原因分析: 但是看到日志内容之后有点茫然 ...
- mysql存储过程之遍历多表记录后插入第三方表中
自从学过存储过程后,就再也没有碰过存储过程,这是毕业后写的第一个存储过程. 因为项目里设备的种类比较多,分别存在不同的数据表中,java中对应不同的java bean对象,想要统一管理有点困难.最近正 ...
- Log4net 日志记录配置信息
<log4net> <!--配置日志的级别,低于此级别的就不写到日志里面去 OFF.FATAL.ERROR, WARN, INFO, DEBUG, ALL --> <ro ...
- OneAPM大讲堂 | Java 异常日志记录最佳实践
[编者按]本文作者是 Casey Dunham.Casey 是一位具有 10 多年经验的专业软件开发人员,以其独特的方式应对应用安全问题而闻名.本文系国内 ITOM 管理平台 OneAPM 工程师编译 ...
随机推荐
- ssh框架中.xml文件小技巧分离xml
struts.xml文件 struts.xml文件里的action可以分离出来,如: <!-- 预警信息监测 --> <include file="config/strut ...
- 大数据 时间同步问题 解决hbase集群节点HRegionServer启动后自动关闭
1)在hbase-site.xml文件中 修改增加 ,将时间改大点<property><name>hbase.master.maxclockskew</name>& ...
- 实现winfrom进度条及进度信息提示
1.方法一:使用线程 功能描述:在用c#做WinFrom开发的过程中.我们经常需要用到进度条(ProgressBar)用于显示进度信息.这时候我们可能就需要用到多线程,如果不采用多线程控制进度条,窗口 ...
- Codeforces.666E.Forensic Examination(广义后缀自动机 线段树合并)
题目链接 \(Description\) 给定串\(S\)和\(m\)个串\(T_i\).\(Q\)次询问,每次询问\(l,r,p_l,p_r\),求\(S[p_l\sim p_r]\)在\(T_l\ ...
- PHP的json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
PHP5.4才支持JSON_UNESCAPED_UNICODE这个参数,此参数是让中文字符在json_encode的时候不用转义,减少数据传输量.但在PHP5.3中,就得自己写个函数来实现,以下就是解 ...
- [JOI2017/2018]美術展
[JOI2017/2018]美術展 题目大意: 有\(n(n\le5\times10^5)\)个物品,每个物品有两个属性:尺寸\(A_i\)和收益\(B_i\).从中选取一个子集,总收益为\(\sum ...
- BZOJ2512 : Groc
最优解一定是将起点.终点以及所有必经点连接成一棵树,对于每条树边恰好走两次,而从起点到终点的一条路径只走一次. 考虑连通性DP,设$f[i][j][k][x]$表示考虑完前$i$个走道,第$i$个走道 ...
- ubuntu下使用nvm安装nodejs
sudo apt-get install curl curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install. ...
- Sklearn线性回归
Sklearn线性回归 原理 线性回归是最为简单而经典的回归模型,用了最小二乘法的思想,用一个n-1维的超平面拟合n维数据 数学形式 \[y(w,x)=w_0+w_1x_1+w_2x_2+-+w_nx ...
- Stack的源码分析和应用实例
1.Stack介绍 Stack是栈.它的特性是:先进后出(FILO:First In Last Out). java工具包中的Stack是继承于Vector(矢量队列)的,由于Vector是通过数组实 ...