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 存储过程捕获所有异常,以及日志记录异常信息的更多相关文章

  1. Atitit mysql存储过程编写指南

    Atitit mysql存储过程编写指南 1.1. 设定参数与返回值  `obj_id` int ,,返回类型 varchar(200)1 1.2. 在语句中使用传入的obj_id参数1 1.3. 测 ...

  2. 第三节:使用Log4net和过滤器记录异常信息,返回异常给前端

    上次面试,遇到,在项目中如何处理业务异常和代码异常,使用txt记录异常信息后,如何直接区分出异常的类型,异常怎么分类处理,希望大家能帮我提出宝贵的意见,完善处理异常, 统一返回参数 public cl ...

  3. mysql 执行计划和慢日志记录

    一.执行计划 1.作用预估sql语句执行的时间,一般准确2.格式: explain sql语句3.type类型的快慢(all最慢,const最快)all < index < range & ...

  4. java异常处理 日志记录异常具体位置的方法

    首先要在方法处抛出 Exception异常 然后在方法调用处try catch接收此异常对象 这样就能够记录异常具体位置了 控制台输出: 日志: 要点: System.getProperty(&quo ...

  5. Log4Net在MVC下的配置以及运用线程队列记录异常信息

    Log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件.数据库.EventLog等),日志就是程序的黑匣子,可以通过日志查看系统的运行过程,从而发现系统的问题.日志的作用:将运 ...

  6. 对MYSQL慢查询slow query 日志记录内容的疑惑

    初始:由于新装服务器出现CPU占用过高,响应不及时的问题排查,因为环境基于最基础的LAMP构架 想到开启 MYSQL slow_query_log 慢查询日志做原因分析: 但是看到日志内容之后有点茫然 ...

  7. mysql存储过程之遍历多表记录后插入第三方表中

    自从学过存储过程后,就再也没有碰过存储过程,这是毕业后写的第一个存储过程. 因为项目里设备的种类比较多,分别存在不同的数据表中,java中对应不同的java bean对象,想要统一管理有点困难.最近正 ...

  8. Log4net 日志记录配置信息

    <log4net> <!--配置日志的级别,低于此级别的就不写到日志里面去 OFF.FATAL.ERROR, WARN, INFO, DEBUG, ALL --> <ro ...

  9. OneAPM大讲堂 | Java 异常日志记录最佳实践

    [编者按]本文作者是 Casey Dunham.Casey 是一位具有 10 多年经验的专业软件开发人员,以其独特的方式应对应用安全问题而闻名.本文系国内 ITOM 管理平台 OneAPM 工程师编译 ...

随机推荐

  1. js基础梳理-关于this常见指向问题的分析

    首先,依然回顾<js基础梳理-究竟什么是执行上下文栈(执行栈),执行上下文(可执行代码)?>中的 3.执行上下文的生命周期 3.1 创建阶段 生成变量对象(Variable object, ...

  2. JDK 1.6 HashMap 源码分析

    前言 ​ 前段时间研究了一下JDK 1.6 的 HashMap 源码,把部份重要的方法分析一下,当然HashMap中还有一些值得研究得就交给读者了,如有不正确之处还望留言指正. 准备 ​ 需要熟悉数组 ...

  3. c++ <vector>学习

    https://www.cnblogs.com/mr-wid/archive/2013/01/22/2871105.html 具体参考上面博客,很详细,也是看他的.今天c++学习200%,项目开发0% ...

  4. ctf study of jarvisoj reverse

    [61dctf] androideasy 164求解器 50 相反 脚本如下: s='' a=113, 123, 118, 112, 108, 94, 99, 72, 38, 68, 72, 87, ...

  5. 湖南大学第十四届ACM程序设计新生杯(重现赛)

    RANK  0 题数 0 期末复习没有参加,补几道喜欢的题. A: AFei Loves Magic  签到 思路 :不需考虑 碰撞 直接计算最终状态即可. #include<bits/stdc ...

  6. the secrets

    prime time productions: my life had collepes arround me? i have worked myselft into exhaustion. my f ...

  7. 基于Ardalis.GuardClauses守卫组件的拓展

    在我们写程序的时候,经常会需要判断数据的是空值还是null值,基本上十个方法函数,八个要做这样的判断,因此我们很有必要拓展出来一个类来做监控,在这里我们使用一个简单地,可拓展的第三方组件:Ardali ...

  8. VirtualBox 共享文件夹设置及使用方法

    工具:VirtualBox,ubuntu14.04 1.选择要设置共享文件夹的虚拟机,点击设置 点击共享文件夹,新建文件夹,选择路径 2.打开虚拟机,从上方工具栏中找到设备,然后点击安装增强功能(由于 ...

  9. inner join 内联与left join 左联

    今天老板把我叫过去,给我分析了一下我写的存储过程[捂脸羞愧中...],因为又临时加了个需求需要关联另外一个视图,我写成了内联,所以读取出来的数据少了好多. select t1.MOTCARRIERNA ...

  10. ICPC Asia Regional 2015 Japan.Routing a Marathon Race(DFS)

    vjudge \(Description\) 给定一张\(n\)个点\(m\)条边的无向图,每个点有一个权值.求一条从\(1\)到\(n\)的路径,使得代价最小,输出最小代价. 一条路径的代价定义为, ...